我正试图在没有停机时间的情况下从VS发布我的web应用程序。如果你在谷歌上搜索,你会发现关于使用老虎机的官方文档,然后再进行交换。
这是一个很好的方法,但当我进行交换时,我还有其他问题,登录丢失(看看这个问题:链接)。
链接中的相关信息:
会话未链接到身份验证,您试图以错误的方式解决它。
所有表单验证票证和cookie都使用数据保护层进行加密和签名。您遇到的问题是由于加密密钥没有保存,并且应用程序彼此隔离
我该怎么做?在AWS中,我有滚动更新。。。
有关更多信息,我正在使用带有Identity 3.0 的ASP.NET Core
谢谢!!
您现在看到的是azure限制。虽然Azure网站将共享密钥环,但它将交换插槽视为单独的应用程序。
有几件事可以尝试。
首先,设置一个通用的应用程序名称。这将有所帮助,因为默认情况下,共享密钥环的每个应用程序都是隔离的;但如果他们共享应用程序名称,他们可以共享密钥
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection();
services.ConfigureDataProtection(configure =>
{
configure.SetApplicationName("my application");
});
}
如果这对azure来说还不够(我真的不确定热交换是否最终使用azure Web App的共享密钥文件夹),你可以将其与使用azure数据表来存储加密密钥相结合-https://github.com/GrabYourPitchforks/DataProtection.Azure/tree/dev
在这两者之间,它应该获得用于保护您的应用程序之间共享的身份cookie的加密密钥。
我为那些感兴趣的人找到了aspnet核心1.0的分叉:
https://github.com/prajaybasu/DataProtection.Azure/tree/dev/DataProtection.Azure
就像另一个一样,它将加密密钥存储在azure存储帐户上。它完全解决了我的问题。
从飞镖的解决方案开始,我解决了我的问题,所以谢谢。
Andrea
您正在使用内存会话状态吗?
"登录"丢失"的问题是架构问题,而不是更新web应用程序的问题。
使用类似RedisCache的东西来获取会话状态。它不仅会在更新应用程序时持续存在,而且会处理多个服务器实例上的负载平衡。事实上,当你扩展到多个服务器时,除了更新应用程序时,你可能还会遇到这个问题。