有没有办法在IIS 7上部署新编译的ASP.NET Web应用程序代码,而无需关闭用户?

时间:2011-08-08 18:49:30

标签: asp.net iis-7 web-deployment smooth

我们公司在客户端的Windows Server 2008 IIS 7 Web服务器上发布了我们的富客户端应用程序(主要使用ASP.NET,WCF服务和ASP.NET AJAX编写)的更新。有一段时间,我们会发布大量更新。有时,用户在发布后立即捕获的错误在自动化测试和阶段测试期间未被捕获。有没有办法在用户仍然打开的情况下在IIS 7上顺利部署ASP.NET代码而不会中断包含未受影响的代码的工作流程?我发现如果我只是手动复制舞台上的代码(没有web.config),并将其粘贴到生产Web根文件夹中,那么就没有人真正开始。但是我想知道这个策略对于在应用程序中努力工作的用户是否有任何副作用。我只是想知道在这种情况下是否有任何其他连接可能被中断或者它们是如何被处理的(即:SQL连接,WCF服务调用,它们是否保持相同的会话以及是否会产生任何影响等)。 ?如果我选择了这种方法,我会在web.config中有一些内容,它会向每个用户(在母版页中)显示一条消息 - 就像一个横幅,上面写着“请注销,清除你的缓存”,所以他们会看到解决问题的更新。但这只会与受影响的用户相关。

如果有人不认为这是次要更新的好策略,并且有更好的策略,例如更改web.config设置,在部署发生时强制用户使用其他服务器。或者其他一些方法,我的耳朵在听。显然后者听起来更安全,但我不知道如何做到这一点。我已经阅读了有关负载均衡服务器的信息,但我认为这种类型的服务器设置是出于不同的目的,比如服务器出现故障,不是吗?或者当你把一个网站关闭时,这会是最好的解决方案吗?我欢迎任何想法。

2 个答案:

答案 0 :(得分:3)

我过去常常强调发布的最小影响,但现在我们将其删除。现实是双重的:

  1. 您不能保证现在某人正在处理的所有内容都不是您即将更新的内容。考虑一下:用户正在处理x.aspx并处于回发中。你放弃一个新的x.aspx。

  2. 如果有足够的通知,维护窗口是一种生活方式。用户应该期望您不时需要对应用程序进行独占访问以进行更新等。

  3. 如果您在部署时真的不知道某人可能在做什么,那么将所有印版保留在空中太难了。特别是如果数据库更新混合在一起!

答案 1 :(得分:3)

如果混合中有负载均衡器:您将使用旧代码删除服务器,并添加使用新代码添加服务器。这可以让旧代码服务器上的流量消失,而不会将人员赶出去。新服务器获取流量。

我们一次向一台服务器发布新版本,直到我们更换服务器场中的所有代码。它为应用程序提供了在现实世界中烘焙的时间。如果出现问题,他们只需要恢复单个服务器。使用负载平衡可以更轻松。

(通常)是无缝过渡。当然,您需要确保应用程序可以处理任何数据库更改等。