从 VS2015 零停机时间将 WebApp 部署到 Azure

Deploy WebApp to Azure with Zero downtime from VS2015

我正在尝试在不停机的情况下从 VS 发布我的 Web 应用程序。如果您在 Google 中搜索,您会找到官方文档中关于使用插槽并稍后进行交换的内容。

这是一个很好的方法,但是我在进行交换时遇到了其他问题,登录丢失(看这个问题:)。

相关资料在link:

会话未link验证,您试图以错误的方式解决它。

所有表单身份验证票证和 cookie 均使用数据保护层进行加密和签名。您遇到的问题是由于加密密钥未保存,应用程序相互隔离所致。

我该怎么做?在 AWS 中,我进行了滚动更新...

有关更多信息,我正在使用 ASP.NET Core with Identity 3.0

谢谢!!

您使用的是内存中的会话状态吗?

'logins' 的问题是 'lost' 是架构问题,而不是更新网络应用程序的问题。

为会话状态使用 RedisCache 之类的东西。它不仅会在您更新应用程序时持续存在,而且还会处理多个服务器实例上的负载平衡。事实上,除了更新您的应用程序时,当您扩展到多个服务器时,您可能会遇到这个问题。

您现在看到的是天蓝色的限制。虽然 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 core 1.0 的分支,对于那些感兴趣的人:

https://github.com/prajaybasu/DataProtection.Azure/tree/dev/DataProtection.Azure

就像另一个一样,它将加密密钥存储在 azure 存储帐户中。 彻底解决了我的问题。

从 blowdart 的解决方案开始,我解决了我的问题,非常感谢。

安德里亚