HttpModules Bug?! Dispose() called more than Init()
I run into some very strange issues latelt with regard to Http Modules. I am using Http Modules to setup the environment for my application. In particular, I am using Unit Of Work Module to mange my Unit Of Work and the life time of application wide resources (like the Inversion Of Control container instnace).
The problem that I run into was that I began to get errors from the application, saying that the container was missing. That, of course, was not possible, since I registered the HttpModule correctly, and it certainly did it job, for a time.
The issue was mainly that after a while, never determenisticly, the application start throwing errors. But at first, it was smooth sailing. I butt my head against many walls, but I finally manage to get a stack trace of the issue.
Here is the call to Dispose(), which releases the resources required to my application:
System.Web.dll!System.Web.HttpApplication.DisposeInternal() + 0x93 bytes
System.Web.dll!System.Web.HttpApplicationFactory.TrimApplicationInstanceFreeList() + 0x96 bytes
System.Web.dll!System.Web.IdleTimeoutMonitor.TimerCompletionCallback(object state) + 0x34 bytes
mscorlib.dll!System.Threading._TimerCallback.TimerCallback_Context(object state) + 0x1a bytes
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x81 bytes
mscorlib.dll!System.Threading._TimerCallback.PerformTimerCallback(object state) + 0x5b bytes
The next request after this call, no call to Init() was made, and the application, predictably, crashed.
I googled and search and reflected for quite a while, but I can't figure out the reason for this. I'm pretty certain that if Dispose() is called on the HttpModule, the next request should call Init(), or create a whole new instnace (preferable), but in this circumstance, it looks like Dispose() is called just because it feels like it.
The server is Windows Server 2003, Enterprise, SP1, using ASP.Net 2.0. I have seen this behavior across several machines, including XP one, so I guess it is not the environment that is causing this issue.
At the moment, the only work around is to not use Dispose(), and let resource be cleaned by the Finalizer thread if neccecary.
Any thoughts?
Comments
Comment preview