部署网站的最佳方式 - 应用程序池启动停止或网站启动停止

时间:2015-03-16 00:33:29

标签: asp.net-mvc iis deployment

将更改部署到网站的最佳方式是什么(替换dll和其他所需文件)?

网站应该停止并启动,还是应该停止并启动应用程序池?

我读到当网站停止时,它仍然在内存中加载了应用程序状态。在这种情况下,是否会提供旧请求?可以毫无问题地更换dll吗?如何在网站启动时重新加载内容?

当应用程序池停止时,它是否会继续提供旧请求?如果是,考虑到网站现在包含已更改的dll,旧请求如何获得服务?

2 个答案:

答案 0 :(得分:4)

  

将更改部署到网站的最佳方式是什么(替换dll和其他所需文件)?

最好的方法是使用Web Deploy来自动完成此过程。它会自动比较文件,只替换所需内容并删除不需要的文件,使其快速,高效,可靠。

  

网站应该停止并启动,还是应该停止并启动应用程序池?

您通常不必这样做。但是,如果您想在升级期间阻止访问您的网站并且升级预计需要花费几秒钟的时间,那么您可以停止该网站并启动另一个使用相同IIS绑定的网站。维护中的应用程序"消息。

  

我读到当网站停止时,它仍然在内存中加载了应用程序状态。在这种情况下,是否会提供旧请求?可以毫无问题地更换dll吗?如何在网站启动时重新加载内容?

HTTP协议是无状态的。因此,大多数更新的内容将从服务器上的新文件重新加载。

有一些例外。

如果您使用out-of-process session state,即使重新编译并重新加载应用程序,状态也会保留。通常,您在会话状态下拥有的数据是您希望在升级后继续存在的数据。

如果您正在使用缓存(System.Web.CachingSystem.Runtime.Caching),那么如果您指定了缓存数据,那么缓存数据将保留为“#34; Not Removable"”。通常,我将单个文件用作应用程序作为缓存依赖,因此当在服务器上编辑(或替换)该文件时,缓存将被重置。

输出缓存没有缓存依赖性。通常它会一直存在,直到重新启动应用程序池。但是,您可以看到this answer手动方式重置它而不重置应用程序池。

Cookie存储在远程客户端计算机上。因此,它们将在完整升级后继续存在。

静态文件(图像,css和javascript文件)通常缓存在远程客户端计算机上。因此,当您进行升级时,将查询字符串附加到这些URL的末尾以确保不使用缓存文件会很有帮助。有关此类方法,请参阅this article

  

当应用程序池停止时,它是否会继续提供旧请求?如果是,考虑到网站现在包含已更改的dll,旧请求如何获得服务?

正如我已经提到的,HTTP协议是无状态的。服务器不会重播客户端以前发出的任何请求。一旦客户端收到响应,服务器就会忘记它们。

Web服务器处理升级的很多方式取决于它是Web应用程序还是Web站点(如果是网站,是否已经预编译)。如果应用程序在升级期间运行,则尝试访问它的用户可能会看到错误。

我的建议是:不要担心。安排非高峰时段的升级。使用Web Deploy自动执行此过程,以使升级窗口尽可能短。并使用上述技术确保缓存的数据和内容得到适当重置。在大多数应用程序中,半夜或几分钟的停机时间几乎没有被注意到。

答案 1 :(得分:0)

首先我不喜欢Web部署,它需要在服务器上安装和管理很多东西。它还需要更加复杂。 (我的意见)我正在读你的评论:

您需要执行以下选项: archecture:您需要使用某种负载均衡器运行2个站点服务器堆栈。 (网络前端和中间件或你做的任何事情)

从防火墙中取出一个离线,将应用程序保留在另一侧 检查您的日志以确保您部署到的站点上的事务已完成。

进行部署:

停止网站/服务(AppPool) 删除与您的udpateing相关的所有现有文件 使用xCopy安装所有文件(或zip提取到目标也可以) 启动网站/服务(AppPool) 从内部网络测试,以确保它的工作 部署完成。

关闭对其他站点的访问并激活您已完成的站点(或sties)(在防火墙负载均衡器处)。 这将允许现有的交易完成,并使您的新代码生效。

在部署中应该查看更多项目,但这应该可以帮助您入门。 欢呼和运气!