我有一个网站,在某些资源上拥有排他锁。我使用.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
事件将永远不会被调用-它不会顺序发生,也不会发生。