2012-06-19 64 views
0

我正在使用Castle Windsor向多個WCF服務注入依賴關係。我們還使用Castle.Facilities.WcfIntegration.DefaultServiceHostFactory和castle的wcfFacility。 我們的服務託管在IIS中,讓我可以訪問Global.aspx事件。我們所有的組件都在瞬態生命週期中註冊。目前,我在application_start事件期間註冊了容器中的所有組件,然後將容器置於application_end中。Castle Windsor和WCF何時註冊和發佈組件

但是,在閱讀了幾個博客和一些SO帖子之後,我開始擔心我的解決方案存在漏洞。換句話說,我認爲在application_end上釋放容器會導致內存從我的應用程序緩慢泄漏。我正在考慮在request_start和request_end或mabye session_start和session_end事件中註冊和釋放。我遇到的問題是,我不知道在哪裏「保留」容器,以便在會話或請求結束後我可以釋放它。有沒有人遇到過這個問題?如果是這樣,你是如何解決它的?我的解決方案聽起來正確嗎?

+0

你可以發佈有關內存泄漏的鏈接嗎? – VJAI

回答

1

實例化容器並註冊Application_Start的所有內容是正確的,並且在Application_End處置容器也是正確的。

通常,當「Castle leaksor」這個詞與Castle Windsor有關時,這是因爲暫態組件沒有正確釋放它們的實例,反過來可能導致實例在容器中積累。這是因爲Windsor跟蹤它所依靠的實例,如果它們的依賴關係圖包含任何涉及退役的事情(例如實現IDisposable)。

因此,作爲溫莎的一般規則,您應該始終發佈您的解決方案。

因爲從來沒使用WCF基金,我不是真的在這方面的專家,但我會感到非常驚訝,如果它沒有正確地釋放一切,它解決了 - 所以我很好奇,你是否知道有問題,還是隻是謹慎?

+0

這也是我的懷疑(設施會照顧它)。我沒有真正的證據證明存在內存泄漏。而只是基於我讀過的內容和對城堡生活方式的理解。我將在我的服務上運行內存跟蹤併發回我的調查結果。謝謝回覆。 – Buzzer

相關問題