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:
> Rhino.Commons.DLL!Rhino.Commons.HttpModules.UnitOfWorkModule.Dispose()
Line 37 C#
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?