[英]IIS App Pool/Restart and ASP.NET
我们使用IIS7来托管基于Web.net的asp.net应用程序。 在此环境中,管理员和开发人员可以定期将代码部署到应用程序。
新代码或应用程序作为DLL进入ASP.NET bin文件夹。 部署新DLL后,IIS将重新启动该进程,从而影响(减慢)所有在线用户。
有没有办法配置IIS以在后台运行该进程,并准备好从旧状态切换到新状态而不影响用户?!
在此先感谢您的反馈!
IIS已经做到了这一点,这就是回收利用的全部内容。 当旧版本的应用程序仍在运行时,IT正在加载DLL。 只有在完成后才能完成回收。
但是, 加载DLL只是准备好Web应用程序的一部分 ,也可能有初始加载,如加载/缓存用户数据库等。
这些操作不是回收过程的一部分 ,它们在所有DLL重新加载并且回收已经完成之后发生。
前段时间我遇到了这个问题,因为在启动过程中由于数据库活动/缓存繁重而导致启动时间很长。 所以我感兴趣的是,是否有一些功能允许我们在回收标记为已完成之前执行代码,以便在一切准备好运行时首先考虑回收应用程序。 基本上我想要的是某种分段功能。
我在这个问题上与IIS团队保持联系,遗憾的是他们告诉我没有这样的功能存在,也没有计划 。
要解决此问题,您可以尝试执行以下操作:
UPDATE
显然他们已经创建了一个IIS模块,现在提供此功能:
IIS 7.5的IIS应用程序预热模块
IIS团队发布了IIS 7.5应用程序预热模块的第一个beta测试版。 这使得应用程序的预热比以前描述的更容易。 您可以指定在Web应用程序接受来自网络的请求之前要执行的资源的URL,而不是编写自定义代码。 在IIS服务启动期间(如果将IIS应用程序池配置为AlwaysRunning)以及IIS工作进程回收时,会发生此预热。 在回收期间,旧的IIS工作进程继续执行请求,直到新生成的工作进程完全预热,以便应用程序不会因未启用的高速缓存而出现中断或其他问题。 请注意,此模块适用于任何版本的ASP.NET,从2.0版开始。
有关更多信息,请参阅IIS.net网站上的应用程序预热。 有关如何使用预热功能的演练,请参阅IIS.net网站上的IIS 7.5应用程序预热模块入门。
看到:
如果您使用ASP.NET 4自动启动功能:
您仍然可以选择自动回收工作进程。 但是,当你这样做时,应用程序将立即重新启动,你的预热代码将会执行(与今天不同 - 你必须等待下一个请求才能执行此操作)。
预热和自动启动功能的主要区别在于预热模块是回收过程的一部分。 而不是在运行init代码时阻止应用程序的请求 。
只有使用“自动启动”功能才能获得的是,您不必等待用户点击页面,这对您的情况没有帮助。
参见顾的博客文章:
更新2:
遗憾的是,IIS 7 / 7.5已停止使用预热模块:
它将成为IIS8的一部分(它现在称为应用程序初始化模块):
http://weblogs.asp.net/owscott/archive/2012/03/01/what-s-new-in-iis-8.aspx
更新3:
正如评论中所指出的,在IIS 8发布后,预热模块重新启动IIS 7.5作为IIS 7.5的应用程序初始化模块 :
http://www.iis.net/downloads/microsoft/application-initialization
ntziolis答案的第一部分是一点点不准确。 工作进程没有被回收或重新启动,它只是继续运行。 如果是这种情况,那么在共享池环境中,每次部署新站点时都会将站点淘汰。
当你部署一个新的ASP.NET应用程序它的工作进程中的网站的“应用程序域”被拆除,而不是池进程。
此外,池回收是一个完全独立的部署概念
在ASP.NET的商业生命中的这个时间点,在部署期间,站点将处于不一致状态,直到部署了所有站点。 目前,对于单个服务器部署的单个站点,Microsoft仍然没有关于此的好故事。
这就是ASP.NET具有特殊的App_Offline.htm
页面的原因。 它就在那里你可以启用该页面,部署然后关闭它。
ntziolis答案的第二部分几乎是正确的,但您不需要两个站点或两个应用程序池。 您只需要两个文件系统文件夹,它们可以在站点的物理文件夹之间切换...如果您在单个服务器上而不是在负载均衡器或ARR之后。
如果您的站点位于负载均衡器或ARR后面的Web服务器上,那么有两个不同的站点是有意义的,您可以将请求从一个站点路由到另一个站点并在每个部署上循环。
显然,如果有大量用户生成的内容(上传的文件等),那么您将站点中的虚拟目录映射到此数据的公共位置。
在运行应用程序的较大规模部署(例如)负载平衡环境中,您可以执行更复杂的部署。
有关相关问题,请参阅:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.