【问题标题】:Deploy WebApp to Azure with Zero downtime from VS2015从 VS2015 以零停机时间将 WebApp 部署到 Azure
【发布时间】:2016-07-30 15:58:45
【问题描述】:

我正在尝试在不停机的情况下从 VS 发布我的网络应用程序。如果你在谷歌上搜索,你会发现官方文档中谈到了使用插槽并稍后进行交换。

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

链接中的相关信息:

会话未链接到身份验证,您试图以错误的方式解决它。

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

我该怎么做?在 AWS 我有滚动更新...

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

谢谢!!

【问题讨论】:

    标签: azure asp.net-identity asp.net-core azure-web-app-service asp.net-identity-3


    【解决方案1】:

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

    “登录”被“丢失”的问题是架构问题,而不是更新网络应用的问题。

    使用 RedisCache 之类的东西来获取会话状态。它不仅会在您更新应用程序时持续存在,而且还会在多个服务器实例上处理负载平衡。就目前而言,当您横向扩展至多台服务器时,以及更新应用程序时,您可能会遇到此问题。

    【讨论】:

    • 嗨,使用身份 3.0 登录不使用会话...请阅读我的问题中附加的链接。谢谢!!
    • 如果其他帖子中有重要信息,那么您应该将其包含在您的帖子中。我不会通过“看这个问题”的声明来浏览外部链接
    • 对不起 LeRoy,我已经添加了我正在使用 Identity 3.0... 我将添加更多信息,但这不是会话未存储在 DB 或其他任何内容中的典型问题,我不使用会话我所有的应用程序。
    • 一切都好,感谢您的澄清!如果不亲自深入研究,我不知道。对不起!
    【解决方案2】:

    您现在看到的是一个天蓝色的限制。虽然 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 的加密密钥。

    【讨论】:

    • 我之前测试过设置应用程序名称,但没有结果...,我已经与 Microsoft 西班牙讨论过我的问题...我们正在使用 Bizspark 计划从 AWS 迁移到 Azure...谢谢为了您的时间和答案,我将测试另一个选项...
    • 我已经给网络应用团队的一些人发了电子邮件,看看密钥环是否共享
    • 嗨@blowdart 我已经对其进行了测试,并且效果很好。再次感谢!!
    • 太棒了!我将了解如何为您创建存储库提供程序项目和 nuget 包
    • 嗨@blowdart...我已经与Microsoft 支持人员进行了交谈,我们检测到您的代码有错误,这使我的Web 应用程序崩溃...我进行了内存转储,信息是:正如我们稍后看到的,当线程被添加到线程池时,任务仍然没有被激活,从而导致“永久”挂起。你知道使它工作的另一种选择吗?再次感谢。如果您需要更多信息,我可以将所有转储或您想要的任何内容发送给您;)
    【解决方案3】:

    我找到了一个 aspnet core 1.0 的分支,供感兴趣的人参考:

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

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

    从吹镖的解决方案开始,我解决了我的问题,谢谢。

    安德烈亚

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      相关资源
      最近更新 更多