It seems to me your transaction is shared between requests, the Module is probably a singleton.
On Dec 5, 1:10 am, Jason Meckley <[email protected]> wrote: > I have a sporadic error that is causing my system to hang/crash. here > are the details > I'm using Castle Monorail with my own Nh HttpModule to open/close > sessions > I'm using NH & Nh.ByteCode.Castle 2.1.0.2002 and NH.SysCache2 > 2.1.0.3001 > I'm using TransactionScope (TS) to manage the session's transactions > The website uses 2 different session factories. So the TS is promoted > to a distributed transaction (if I understand TS correctly). > > the full exception is > Exception information: > Exception type: InvalidOperationException > Exception message: A TransactionScope must be disposed on the same > thread that it was created. > > Thread information: > Thread ID: 5 > Thread account name: NT AUTHORITY\NETWORK SERVICE > Is impersonating: True > Stack trace: at System.Transactions.TransactionScope.Dispose() > at StockBook.Web.Infrastructure.Web.SessionModule.DisposeOfSessions > (Object sender, EventArgs e) in ...SessionModule.cs:line 45 > at > System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute > () > at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, > Boolean& completedSynchronously) > > the module > public class SessionModule : IHttpModule > { > private TransactionScope transaction; > > public void Init(HttpApplication context) > { > context.BeginRequest += OpenSessions; > context.EndRequest += DisposeOfSessions; > } > > private void OpenSessions(object sender, EventArgs e) > { > var options = new TransactionOptions {IsolationLevel = > IsolationLevel.ReadCommitted}; > transaction = new > TransactionScope(TransactionScopeOption.Required, > options); > > WindsorContainerAccessorUtil > .ObtainContainer() > .ResolveAll<ISessionFactory>() > .Select(f => f.OpenSession()) > .ForEach(s => > ManagedWebSessionContext.Bind(HttpContext.Current, > s)); > } > > private void DisposeOfSessions(object sender, EventArgs e) > { > if (HttpContext.Current.Error == null) > { > transaction.Complete(); > } > WindsorContainerAccessorUtil > .ObtainContainer() > .ResolveAll<ISessionFactory>() > .Select(f => > ManagedWebSessionContext.Unbind(HttpContext.Current, > f)) > .ForEach(s => s.Dispose()) > > //ERROR THROWN HERE > transaction.Dispose(); > } > > public void Dispose() > { > }} > > I'm using Rhino.ServiceBus with Rhino.Queues > RQ uses TransactionScope to manage the service bus messaging > I have a PostInsert, Update and Delete listener which will send a > message, which ultimately creates a TS in RQ. I'm not sure if this is > related because the errors only happens with urls for reading data, > not writing. > > Our end users say they are able to use the system, then leave a page > open for awhile. When they come back to the system this error is > thrown. They are only reporting this in the morning, but the logs show > this happens throughout the day. > > We also have Sql backups happening throughout the day as well. Could > this effect a distributed transaction (thus effecting the TS)? > > What is happening is clear by the exception message, I just don't > understand how or why? Where would I look to trouble shoot this kind > of thing? -- You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.
