Today I wanted to extend my NHibernate implementation to allow for multi-page transactions for certain operations (that I control) and keep with the cleaner ISession-per-HttpRequest pattern for everything else.
To do that I had to modify my HttpModule to allow for this check, but I had no access to the SessionState here. Why is that?
Here’s what I was doing in my HttpModule:
public void Init(HttpApplication application) { //add event handlers application.BeginRequest += new EventHandler(context_BeginRequest); application.EndRequest += new EventHandler(context_EndRequest); }
I was creating and disconnecting my ISession object inside of those methods. The problem is that SessionState is not loaded until after the BeginRequest had fired and before the EndRequest had fired. (specifically it is accessibly after the AcquireRequestState event). So, changing my code to this worked:
public void Init(HttpApplication application) { application.PreRequestHandlerExecute += new EventHandler(application_PreRequestHandlerExecute); application.PostRequestHandlerExecute += new EventHandler(application_PostRequestHandlerExecute); }
Also, I saw some people online incorrectly suggesting that one implement the IRequiresSessionState or IReadOnlySessionState interfaces, but if you read the docs, those are marker interfaces for HttpHandlers only.
I'm Ben Scheirman. I am a .NET software developer with a strong interest in agility. I work as a Principal Consultant with Sogeti.
Read more here.
email me
Ads by The Lounge
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.