IIS 7.5-更新web.config时不遵守“禁用重叠回收”属性


25

我有一个网站,在某些资源上拥有排他锁。我使用.NET Application_Start和Application_End事件在适当的时间获取和释放对这些资源的锁定。为了使其正常工作,在任何给定时间只能运行我的应用程序的一个实例。

为此,我将Disable Overlapped Recycle“应用程序池”上的属性设置为True。此属性应确保每当回收应用程序池时,旧的工作进程在启动新工作进程之前完全关闭。只要通过IIS手动回收应用程序池,由于达到空闲超时而自动回收或根据任何特定时间/时间间隔规则自动回收应用程序池,此方法都可以正常工作。

但是,当网站的web.config更新时,此规则未得到应用-新的辅助进程在旧的进程关闭之前启动。这会导致不良情况的发生。我将Disable Recycling for Configuration Changes属性设置为,False因为我确实希望在web.config更新时回收应用程序池-这在开发过程中经常发生。

这是所期望的,还是IIS中的错误?我唯一设置的选项是,更改web.config不会回收应用程序池吗?我宁愿不这样做,因为我敢肯定这会引起人们更改配置并忘记回收应用程序池的麻烦。

更新:

更清楚地说,当新的工作进程start事件在旧的工作进程完成关闭之前被调用时,则旧的工作进程end事件将永远不会被调用-它不会顺序发生,也不会发生。


在web.config更新之后多长时间才能启动新工作进程?
Greg Askew

回收后,只要尝试访问该网站,新的工作程序进程就会开始-如果我很快的话,不到一秒钟。如果离开,旧的工人进程“关机”事件发生在回收后20-30秒。
约翰,

我有同样的问题。有重叠之处
安德鲁·里默

11
编辑web.config文件会导致appDomain重新加载。appDomain与AppPool分开。您不应仅通过更改web.config来看到新的W3WP进程ID。看到这里treeloop.com/blog/iis-application-domain-and-pool-recycling
kheld

1
@kheld是绝对正确的(也许将其添加为答案),这不是一个愚蠢的重叠,而是一个appDomain重叠。我不认为您可以阻止此操作,但是可以在更改时禁用应用程序域回收。
山姆·科根

Answers:


1

从此MSDN帖子中:https : //blogs.msdn.microsoft.com/tess/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles/

因此,作为代码部署过程的一部分,当您部署以下任何一项更改时,池似乎都将回收:

立即回收

  • Web.config更改
  • Machine.config更改
  • Global.asax更改
  • Bin目录更改
  • App_Code更改

借用: https : //stackoverflow.com/questions/302110/what-c​​auses-an-application-pool-in-iis-to-recycle

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.