I have a site which holds an exclusive lock on some resources. I used the .NET Application_Start and Application_End events to acquire and release the lock on these resources at the appropriate time. For this to work properly, there can only ever be one instance of my application running at any given time.
To get this to happen, I've set the
Disable Overlapped Recycle property on the Application pool to
True. This property is supposed to ensure that the old worker process shuts down completely before a new one starts up whenever the app pool is recycled. This works fine whenever the app pool is recycled manually through IIS, automatically as the result of the idle-timeout being reached or automatically according to any specific time/time interval rules.
However, when the web.config for the site is updated, this rule isn't getting applied - A new worker process starts up before the old one finishes shutting down. This causes bad things to happen. I have the
Disable Recycling for Configuration Changes property set to
False as I do want the app pool to get recycled when the web.config is updated - this happens frequently during development.
Is this something which is expected, or is it a bug in IIS? IS my only option to set up so that changing the web.config doesn't recycle the app pool? I'd rather not do this, since I'm pretty sure it will cause many headaches with people changing the configuration and then forgetting to recycle the app pool.
To be more clear, when the new worker process
start event is called before the old worker process has finished shutting down, then the old worker process
end event never gets called - It doesn't happen out of sequence, it never happens at all.