2011-05-02 98 views
0

我創建了一個包含WCF服務的程序集,這些程序在程序集的app.config文件中聲明,並在我開始調試客戶端應用程序時自動託管。這一切都有效。服務啓動之前初始化WCF服務?

問題是,我需要運行一些初始化之前服務託管,尤其是我需要收集已知類型的列表與使用[ServiceKnownType(「RegisterKnownTypes」的typeof(ServiceKnownTypesHelper))]屬性(我使用MEF從我的程序集中收集知識類型,所以我不能將它們放在配置文件中,因爲它們在運行時已知,而不是之前)。

有沒有辦法在WCF服務託管之前初始化?我可以初始化服務類的構造函數中的東西,但是註冊已知類型爲時已晚。

回答

1

這通常被封裝在派生ServiceHost在那裏你可以你通過重寫OnOpening方法託管服務之前初始化什麼。您也可以通過處理默認ServiceHost上的Opening事件來執行一些初始化,而不實施新的ServiceHost

編輯:

正如你已經找到了爲服務庫中生成的config文件僅用於測試工具WcfSvcHost.exe。應用程序本身必須在主app.config/web.config中有自己的配置,以便您可以根據需要更改庫配置以進行調試。在WcfSvcHost.exe中如何影響ServiceHost初始化沒有其他方法。

+0

在Visual Studio中運行的客戶端應用程序時2010調試器,而WCF服務項目在同一個解決方案是,我指的是自動啓動/託管服務 - 凡在WCF服務組裝,這是主持過程中,我可以找到服務主機? (對於獨立的Windows服務,這完全沒有問題,我可以找到ServiceHost,但這並不能幫助我進行調試)。 – Sam 2011-05-02 12:40:04

+1

在這種情況下,您不能添加自定義初始化。該服務託管在WcfSvcHost.exe工具中,並且完全不受您的控制。它僅從您的程序集加載服務類型以承載它們。 – 2011-05-02 13:08:00

+0

它只是發生在我:因爲這是WCF組件和該組件的配置文件永遠不會被傳遞給任何客戶,我能惹的配置以任何方式我想文件了。所以我可以將這些知識類型添加到配置中。凌亂,當他們改變,但由於它是僅用於調試,多數民衆贊成確定。 – Sam 2011-05-02 14:17:49