使用ASP.NET网站进行持续部署?

时间:2010-05-19 19:26:26

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

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

如果您上传新版本的网站甚至更改单个文件,它会启动当前登录的用户,并使他们从任何表单等开始。是否有秘密可以在不干扰.NET站点用户的情况下进行部署?

5 个答案:

答案 0 :(得分:5)

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

最干净的路线是将会话卸载到会话状态服务器,或最小化会话的使用。

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

答案 1 :(得分:5)

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

这导致已删除的会话和被淘汰的用户。

解决方案是使用默认InProc以外的其他会话存储方法 您可以通过设置session state mode来实现此目的。 SqlServerStateServer选项为您的问题提供了非常好的补救措施。

SqlServer模式相对容易设置和启动并运行。 (基本上,它只是创建一个数据库,运行aspnet_regsql,然后将其指定给配置。)如果您没有MS SQL Server或不想使用它,您可以使用StateServer或创建您自己的提供商并使用Custom模式。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

实现这一目标有两种选择:

  1. 根本不要使用Session。 (您可以使用cookie进行身份验证)
  2. 使用其他会话状态模式。状态服务器或SQLServer。 http://msdn.microsoft.com/en-us/library/ms178586(v=VS.80).aspx
  3. 无论哪种方式,您还可以灵活地在多台服务器上运行应用程序,以实现性能或故障安全群集。

答案 4 :(得分:0)

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

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