发布ASP.NET网站的新版本 - 最佳实践

5

发布asp.net应用程序的最佳实践是什么?

我担心正在使用该应用程序的用户。如果我推送一个新版本,会将他们踢出吗?IIS如何处理已经打开的会话?

我正在寻找一种简单的方式来推送新版本而不影响用户。

6个回答

5
我假设你没有负载均衡环境,也就是没有多个Web服务器?
在这种情况下,您最好的选择可能是:
1.查看日志,并确定哪个时间段流量最少。
2.假设您有全站主页,请修改.master文件以添加一条消息,警告人们在某个时间段进行网站维护。如果您没有使用主页,则在主页和其他高流量页面上添加消息。
3.在指定的时间将app_offline.html文件放入站点根目录。
4.部署更改。
5.从根目录中删除app_offline.html文件。
6.请求主页并希望它可以正常工作。

3
并编写一个脚本来完成所有这些! - Konstantin Spirin

1

我倾向于遵循以下步骤:

  1. 为更新的应用程序创建一个新目录(wwwroot/myAppV1/,wwwroot/myAppV2/等)
  2. 在主应用程序下设置一个新的虚拟目录,指向新的应用程序(如果您关注安全性,请使用GUID作为虚拟目录)
  3. 通过虚拟目录测试应用程序
  4. 将app_offline.htm文件添加到当前工作的应用程序中
  5. 当您满意它的工作时,将IIS中的网站目录重新指向新目录

除了可能需要更新IIS设置之外,这对我来说是最好的方法。这样可以在切换回实时环境之前测试应用程序。


0
Stack Overflow Podcast #63中,Jeff Atwood提到了Stack Overflow如何处理这个问题。他说他们知道低峰期是什么时候,网站基本上会离线几秒钟,然后重新上线。

1
但是现在他们也有负载平衡服务器(http://blog.stackoverflow.com/2009/09/load-balancing-stack-overflow/),因此可以将一个服务器下线,部署更改,重新上线,然后将另一个服务器关闭 - 这应该会使网站保持在线状态。 - Zhaph - Ben Duguid
1
啊,但是第63期播客是在七月底录制的,当时所有东西都在“一个大服务器”上(价值1200美元)。 - T. Stone

0
如果您正在使用Web应用程序模型,插入新的DLL将导致应用程序重新启动,从而中断任何正在运行的操作,并使会话数据和缓存过期。Cookie将保持完好无损,因此用户将保持登录状态。

0
在进行更新时,警告或通知您的用户(只需在网站标题处放置简单文本)。在进行更新时,请确保将应用程序设置为离线状态,您可以通过在根文件夹中简单地放置app_offline.htm文件来实现。然后进行更新并删除app_offline.htm以使您的网站恢复在线状态。

0

提供两种选择:

  1. 有一个忍者技巧,不是很多人知道,就是拥有 两个 生产环境,在新环境运行时更改您的 DNS 服务器以指向新环境,这样人们将不会失去状态,并且在其 DNS 缓存更新后将使用新站点,通常在一天内。过了一天后,可以安全地关闭第二个(旧的)生产环境,当需要再次升级时,可以再次切换到该环境。

  2. 为了使停机时间尽可能短,我会在生产服务器上创建一个名为 test.example.com 的子站点的新虚拟目录,在那里它工作正常后,我会更改 www.example.com 虚拟目录文件路径以指向新目录,然后删除 test.example.com。如果您正在使用不依赖于 cookie 或 RESTful 的某种状态,则某些用户将因应用程序池重新启动而失去其状态。始终在执行此操作之前进行公告,以便用户做好准备,并且如其他人所指出的,最好在流量尽可能低的情况下执行此操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接