2008-12-03 41 views
3

我有一個WCF服務,將在IIS下託管。現在我有一些資源(連接),我在服務構造函數中創建。當託管服務的IIS關閉或重置時,我需要釋放這些資源。這些不是我每次客戶端斷開時都要清除的資源,但它們是應用程序範圍的資源,只有在服務本身或IIS關閉時纔會釋放資源。如何在IIS下託管服務時爲WCF ServiceHost事件創建監聽器?

我看到另一篇文章,有人提到他創建了一個監聽器來捕獲ServiceHost的事件。有人可以幫我弄清楚如何獲得ServiceHost的句柄並捕獲IIS重置或IIS關閉事件並釋放WCF服務中的資源?

回答

3

嗯,我沒有想法,但我認爲this article包含在「訪問IIS中的ServiceHost」一章中的答案。看起來你需要建立自己的HostFactory,因爲開箱即用的IIS使用標準的HostFactory,並且實際上控制着主機的創建和銷燬。通過提供您自己的HostFactory,您可以添加自己的代碼來控制初始化和銷燬​​...

+0

正確。但請記住,構建一個自定義的ServiceHostFactory並不難。它主要是樣板。 – Cheeso 2009-06-01 18:54:14

0

WCF服務和IIS託管的重點是實現可伸縮性並允許輕鬆託管。儘管您可以連接到由ServiceHostBase類公開的事件(請參閱here),但我會建議您不要這樣做,並分析您是否真的需要這些共享資源。要求您重新思考的主要原因是:共享資源需要線程安全(IIS可以同時處理多個請求),因此這會給應用程序的可伸縮性帶來瓶頸;其次,如果您的服務是無狀態的,這包括(我猜)共享資源(或應用程序範圍資源)的使用情況。

3

您可以在持有資源的類上使用帶終結器的IDisposable模式。

在卸載AppDomain時,所有對象都已最終確定,並且如果引用資源(如此連接)的對象具有終結器,則終結器將被調用,並且您可以關閉/處理該點處的資源。