1

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

如果有人认为这不是小更新的好策略,并且有更好的策略,例如更改 web.config 设置,强制用户在部署时使用不同的服务器或其他东西。或者其他一些方法,我的耳朵在听。显然后者听起来更安全,但我只是不知道如何做到这一点。我读过负载平衡服务器,但我认为这种类型的服务器设置是为了不同的目的而完成的,比如如果服务器出现故障,不是吗?或者,当您关闭一个站点时,这会是最佳解决方案吗?我欢迎任何想法。

4

2 回答 2

3

我过去也强调发布的影响最小,但现在我们取消了它。现实是双重的:

  1. 你不能保证某人现在正在做的所有事情都不是你要更新的东西。考虑一下:用户正在处理 x.aspx,并且正在回发。您删除了一个新的 x.aspx。

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

当您真的不知道部署时有人可能在做什么时,很难将所有的盘子都放在空中。特别是如果数据库更新混合在一起!

于 2011-08-08T19:08:17.420 回答
3

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

我们一次向一台服务器发布新版本,直到我们替换服务器场中的所有代码。它使应用程序有时间在现实世界中烘焙。如果出现问题并且确实出现了问题,您只需还原单个服务器。使用负载平衡使其更容易。

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

于 2011-08-08T19:08:48.363 回答