我在ASP .NET Web窗體應用程序中使用會話每請求方法。會話已在ASP .NET會話每請求模式中關閉
這是當請求結束運行的代碼,這是我怎麼關閉會話:
protected void Application_EndRequest(object sender, EventArgs e)
{
ISession session = ManagedWebSessionContext.Unbind(HttpContext.Current, SessionFactoryProvider.SessionFactory);
if (session != null)
{
if (session.Transaction != null && session.Transaction.IsActive)
{
session.Transaction.Rollback();
}
if (session.IsOpen)
{
session.Close();
}
}
}
很明顯的東西。但是,我在撥打時段時不斷得到例外。關閉。唯一的例外是型SessionException和消息是:
{ 「會話已經關閉」}
堆棧跟蹤爲:
at NHibernate.Impl.SessionImpl.Close() in d:\CSharp\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:line 343
NHibernate的我的版本使用的是:3.0.0.4000
我已經se拱起代碼,可能會關閉會議,但沒有找到任何。我也用簡單的請求測試了它,它對session對象什麼都不做,而且還是一樣的。任何想法可能是什麼問題?
編輯:分而治之會議結束後,我已經有針對性的一段代碼,負責該異常:
var session = SessionFactoryProvider.GetCurrentSession();
using (ITransaction tx = session.BeginTransaction())
{
session.Update(instrument);
tx.Commit();
}
如果我把它註釋掉會議在EndRequest處理程序,並順利關閉無會話已關閉異常被拋出。
的是的Isession的IDisposable,所以你應該更喜歡調用Dispose()就可以了吧。這個版本的NH真的很老,它也是NH 3系列中的第一個,所以也許你應該嘗試升級。 –
謝謝。我使用了Dispose,但仍然如此。我發現的是,明確的交易導致了這個問題。我會更新這個問題。 – dragonfly
這很奇怪......爲了最好的兼容性,事務總是應該是「明確的」,所以這個故事必須有更多。 –