2011-06-21 203 views
2

我見過幾篇關於在IIS中託管WCF服務時進行預熱的文章(即預加載緩存,加載插件等) - 基本上所有的昂貴的東西不希望用戶在發出第一個請求時徘徊),但是我沒有看到WCF在.NET服務中自託管時的任何等效內容。預熱自我託管的WCF服務

有沒有人能夠做到這一點?

+0

你能舉一些例子嗎?爲什麼自助服務中的流程會有所不同? – mellamokb

+0

由於在自託管的環境中,您自己創建了「ServiceHost」並且已經打開它,實際上不需要「預熱」 - 這與IIS按需創建ServiceHost類以滿足請求不同,在這裏,熱身可以幫助在第一次請求進入之前提前創建ServiceHost的第一個實例 –

回答

2

如果您要託管服務,則可以在調用ServiceHost.Open併發出「ping」請求之後,爲服務創建客戶端(即使用ChannelFactory<T>);這樣,如果服務實現正在執行一些繁重的加載操作,那麼可能會發生,而不是第一個「真正的」客戶端請求到達時。

+0

Hacky,但我猜測它可行! –

0

主機打開後,類型會被加載,您就可以開始了。根據我的經驗,延遲通常會創建客戶頻道。昂貴的部分是創建Channel Factory,所以我更願意先創建併爲我的通話使用GetChannel()。您還必須在首次連接時協商安全,以便您可以調整這些設置以找到合適的平衡。

我相信當你在IIS中時,你正在使用WAS服務。該服務的主要功能並不是始終保持主機打開狀態,因此不會爲每個空閒服務使用資源,因此在需要時需要時間加載程序集。自啓動時,自託管會將所有資源分配給您的服務和主機。

+0

我登錄了WCF服務中的熱身代碼;當承載服務的.NET服務啓動時,該代碼肯定不會被調用,而是當第一個客戶端發出第一個請求時。 –