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

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

我有一个网站,它对某些资源拥有独占锁。我使用 .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事件就永远不会被调用 - 它不会按顺序发生,根本不会发生。

答案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 更改Global.asax changes
  • Bin 目录变化
  • App_Code 更改

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

相关内容