我有一個使用ReadCommitted Isolation的NHibernate MVC應用程序。如何防止NHibernate長時間運行的進程鎖定網站?
在網站上,用戶可以啓動一個特定的過程,根據輸入可能需要幾分鐘的時間。這是因爲會話是按請求進行的,並且整個時間都是打開的。
不過,雖然在運行,其他用戶不能訪問該網站(他們可以嘗試,但除非長時間運行的是完成他們的要求不會通過)
更重要的是,我也有一個需要有一個控制檯應用程序也可以在連接到同一個數據庫時執行這個長時間運行的功能。它造成同樣的問題。
我不確定我的設置有哪部分是錯誤的,任何反饋將不勝感激。
NHibernate設置了流暢的配置和StructureMap。
- 隔離級別設置爲ReadCommitted。
- 會話工廠的生命週期是HybridLifeCycle(這在網絡上應該是每個請求的會議,但對勝利的控制檯應用程序將ThreadLocal的)
可以長時間運行的過程中向下削成成代碼工作的小戶型您的系統的要求是什麼? – Rippo 2013-04-12 07:48:52
@Rippo我可以修改可以在較小的塊中工作,但我仍然不知道如何處理或使用會話(單元工作)。無論我的代碼如何分解,它始終是一個巨大會話的一部分。我不能(不知道如何)結束一個會話/在一個進程內啓動一個新的會話 – TheFabledOne 2013-05-13 21:19:43
您是否使用會話請求模式?我傾向於在我的MVC控制器上爲此模式使用actionfilter。然後這讓我可以在單個actionrequest上擁有迷你UOW – Rippo 2013-05-14 08:37:28