2012-11-23 155 views
0

我正在使用一個MVC4,C#,Castle Windsor,fluentnhibernate堆棧來存儲我的web應用程序,它通常工作得很好。NHibernate會話意外關閉

它只是偶爾,我得到有關NHibernate的東西線沿線的一個錯誤:

無效試圖調用時讀取器已關閉閱讀。

內部連接致命錯誤。

當我多次打電話時,這通常會拉長它的醜陋的頭。

目前我正在複製它,同時從jQuery獲取多個ajax。

我懷疑問題是,我的NHibernate會話管理。

我能想到的唯一的事情是,電話是有人使用相同會議上,第一個完成並關閉它,然後下面的調用是無法完成的。

這不應該是可能的,因爲我的會話這樣的處理方式:

Kernel.Register(
       Component.For<ISessionFactory>() 
           .UsingFactoryMethod(_ => config.BuildSessionFactory()), 
       Component.For<ISession>() 
           .UsingFactoryMethod(k => k.Resolve<ISessionFactory>().OpenSession()) 
           .LifestylePerWebRequest()); 

應爲請求權爲一個會議?

還有其他方面,或者我可以在哪裏尋找問題?我很困難。

回答

0

當然在幾分鐘後解決了這個問題,但答案讓我大開眼界。

This answer讓我走下了正確的道路。

雖然我的所有知識庫,經理和其他圖層都使用Castle Windsor以正確的生活方式安裝,但還是有一個不是。

我正在做一個來自ActionFilter的Repository調用,我的所有動作過濾器都是通過一個ActionInvoker類調用的,該類被錯誤地註冊爲Singleton,導致我的錯誤。當然應該

container.Register(Component.For<IActionInvoker>() 
            .ImplementedBy<WindsorActionInvoker>() 
            .LifeStyle.***Singleton***); 

​​

又一個提醒要密切注意那些生活方式。