将WebApp部署到Azure,从VS2015起实现零停机



我正试图在没有停机时间的情况下从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的东西来获取会话状态。它不仅会在更新应用程序时持续存在,而且会处理多个服务器实例上的负载平衡。事实上,当你扩展到多个服务器时,除了更新应用程序时,你可能还会遇到这个问题。

最新更新