2008-10-07 57 views
4

我正在Windows服務中託管服務。如何在WCF中自行託管時初始化服務對象

下面的代碼片段實例化ServiceHost的對象:

Host = new ServiceHost(typeof(Services.DocumentInfoService)); 

的DocumentInfoService類實現了有一個調用需要進行初始化(實際上是一個連接字符串)的業務對象的方法合同接口。理想情況下,我希望託管進程從配置文件中獲取連接字符串,並將其傳遞給服務對象DocumentInfoService的構造函數,DocumentInfoService將保留它並根據需要使用它傳遞給業務對象。

但是,ServiceHost構造函數需要一個System.Type對象 - 因此DocumentInfoService的實例是通過默認構造函數創建的。我確實注意到ServiceHost有另一個構造方法,它接受一個對象實例 - 但文檔指出它是用於單例。

有沒有一種方法可以讓我在創建對象之後到達對象,以便我可以傳遞它一些初始化數據?

回答

4

ServiceHost將根據爲端點配置的綁定和行爲創建服務實例。沒有特定的時間點,你可以依靠服務實例。因此,ServiceHost不公開服務實例。

您可以做的是將代碼添加到服務對象構造函數中,以通過ConfigurationManager類讀取相關配置值本身。

當然,如果你不保留你的配置在app.config中,那對你不起作用。另一種方法是創建一個衆所周知的單例對象,服務實例在創建時可以訪問以獲得必要的配置。

還有創建自己的ServiceHost或自己的ServiceHostFactory來顯式控制服務實例化的選項。這將使您在創建時獲得新的服務實例。儘管如此,我會遠離那個選項。這不值得爲你的場景付出努力。

+0

當我發佈這個問題後,我想起我曾經做過類似的事情,並忘記了。我已經將一個設置文件添加到庫項目中,然後將生成的app.config的相關部分複製到可執行項目中的真實app.config。我會在這裏嘗試。謝謝! – 2008-10-08 15:23:53