2011-10-18 53 views
1

我們使用Spring.NET作爲依賴注入和NHibernate作爲ORM。我們使用會話每請求模型,並使用Spring.NET創建會話。在其中一個頁面中,有一個web服務調用。當Web服務調用拋出EndPointNotFoundException異常時,NH會話關閉,我們得到'懶惰初始化異常:'未能懶惰地初始化一個角色集合:,沒有會話或會話被關閉(我們有一個Person對象,頁面加載,但Person對象具有一組延遲加載的集合,如地址等,當訪問其中一個延遲加載的集合時,引發錯誤)。如果不引發異常,則一切正常。有沒有快速的解決方案?需要當EndPointNotFoundException拋出WCF調用異常時,NHibernate會話(Session Per Request)會關閉,如何解決這個問題?

+0

爲什麼NH會議上得到的web服務錯誤關閉? –

+0

:)這就是我想弄明白的。一旦引發異常,我會收到錯誤'沒有會話或會話已關閉'。 – RAM

+0

快速解決方案是「不要從視圖中查詢」並在您的數據庫層中加載所需的對象。 http://nhprof.com/learn/alerts/QueriesFromViews – Andreas

回答

0

更多的信息,但我會盡力做一個計算的猜測:

拋出的異常沒有被處理,或者如果處理重新拋出。 異常傳播到頁面錯誤處理程序。

無論是沿例外泡沫管道的異常處理函數調用ISession.Close(),然後消耗異常(並因此執行程序通過頁面的渲染繼續)路某處

這種情況並不少見,通常這樣做:在回退時建議交易也關閉ISession

請注意,可能會對失敗的提交執行回滾+關閉,在這種情況下,失敗的Web服務調用會以某種方式污染對象狀態,從而導致提交失敗。異常處理和消耗。

細節問題的細節是,包含代理的NHibernate的實體還存在一些代碼路徑得到執行,並試圖引用關閉ISession

相關問題