【问题标题】:Continuous Deployment with an ASP.NET website?使用 ASP.NET 网站进行持续部署?
【发布时间】:2011-02-21 13:26:59
【问题描述】:

我有一个 C#/ASP.NET 网站,目前正在开发中。当我们在生产中时,我想在一天中经常发布,因为我们修复错误并添加功能(例如:http://toni.org/2010/05/19/in-praise-of-continuous-deployment-the-wordpress-com-story/)。

如果您上传网站的新版本,甚至更改单个文件,它会踢出当前登录的用户并让他们从任何表单等重新开始。能够在不干扰 .NET 站点用户的情况下进行部署有什么秘诀吗?

【问题讨论】:

  • 我认为您需要更改存储会话的方式。我相信你需要去基于文件或基于sql的存储。我相信您当前正在将它们存储在进程中,我认为它们将它们存储在应用程序组的内存空间中。无法提供更多细节,抱歉
  • @hamlin,这值得回答。
  • 应用程序会话如何与表单身份验证连接?
  • 我的意思是,如果会话与身份验证票证相关,则网络场将无法对用户进行身份验证,除非您将会话存储在公共位置,而事实并非如此。

标签: c# .net asp.net session-state continuous-deployment


【解决方案1】:

如果您对配置文件、应用程序的 bin 文件夹的内容或类似内容进行更改,ASP.NET 工作进程将与您的应用程序一起重新启动。

这会导致会话被删除和用户被踢出。

解决方法是使用默认InProc以外的其他会话存储方式。
您可以通过设置session state mode 来实现此目的。 SqlServerStateServer 选项可以很好地解决您的问题。

SqlServer 模式相对容易设置、启动和运行。 (基本上就是创建一个数据库,运行aspnet_regsql,然后指定到config中。)如果你没有MS SQL Server或者不想用,可以使用StateServer,或者自己创建提供者并使用Custom 模式。

唯一的限制是您只能使用SqlServerStateServer 模式存储可序列化值。

【讨论】:

  • 同意这是一个会话问题,我意识到我在原始问题之后很久才回答这个问题(哦,好吧)。我们遇到了较大流量负载的 SQL Server 状态死锁问题。我们最终选择了 Microsoft AppFabric Cache,这是 MS Azure 使用的。到目前为止,这对我们来说是一个可靠的解决方案。
【解决方案2】:

您看到这个的原因是因为您正在重置应用程序池,从而重置每个人的会话。

最干净的方法是将会话卸载到会话状态服务器,或尽量减少会话的使用。

解决此问题的一种方法是,如果您无法卸载会话,则始终部署到新的虚拟目录。然后,您面向公众的 URL 将重定向到您的最新版本。所有已登录的用户将继续使用旧版本,但任何新用户都将使用新版本。

【讨论】:

    【解决方案3】:

    有两种方法可以实现:

    1. 根本不使用会话。 (您可以使用 cookie 进行身份验证)
    2. 使用另一种会话状态模式。状态服务器或 SQLServer。 http://msdn.microsoft.com/en-us/library/ms178586(v=VS.80).aspx

    无论哪种方式,您都可以灵活地在多台服务器上运行您的应用程序,以提高性能或故障安全集群。

    【讨论】:

      【解决方案4】:

      根据您在 Session 对象中存储的内容,您可以在 Global.asax 的 Session_Start 处理程序中重建它。我曾经在一个内部应用程序中执行此操作,我们只将用户的身份真正存储在 Session 中,因此我们可以使用他们的授权 cookie 来重新创建会话。

      如果您这样做,请记住一件事:假设用户加载了一个表单,然后离开去吃午饭,而您在他们离开时更新了该页面。如果他们返回办公桌并提交表单,他们会将旧版本的表单提交到新的代码隐藏。

      【讨论】:

      • 我也不确定,但你必须做一些明确的事情,这将是一个潜在的失败点。也许是某种形式的表单版本控制,因此表单可以查看用户是否正在将过时的表单发布到更新的代码隐藏中。无论如何,如果您无论如何都不能使用 cookie 方法,您不必担心 :)
      【解决方案5】:

      我想用户被踢是因为网络服务器应用程序进程重新启动。默认情况下,用户会话存储在内存中,会话数据被终止。会话提供程序是 web.config 中的可配置选项。可能选择外部(网络应用程序进程外)会话提供程序是朝着您期望的方向迈出的一步。

      【讨论】:

        猜你喜欢
        • 2012-10-30
        • 1970-01-01
        • 1970-01-01
        • 2012-12-08
        • 2018-10-24
        • 2021-04-19
        • 1970-01-01
        • 2015-12-27
        • 1970-01-01
        相关资源
        最近更新 更多