2010-04-14 114 views
0

我要檢查端點是否在配置中定義之前,我會盡力去創造如何獲得配置WCF服務

System.ServiceModel.ClientBase<T> sourceClient = new System.ServiceModel.ClientBase<T>(EndpointName, new EndpointAddress(discoveryUri)); 

要檢查它,我需要得到一個配置,但我怎麼能定義是否需要使用WebConfigurationManagerConfigurationManager。有什麼方法可以定義WCF服務的託管位置嗎?

回答

2

您將不得不自己獲取信息 - WCF服務本身不知道它是否將託管在IIS中或是自託管的。畢竟,這只是一個ServiceHost實例正在某種程度上旋轉起來。

所以我想你必須有一些設置,可以放進任何web.configapp.config - 是這樣的:

<add key="WCFHost" value="IIS" /> 

<add key="WCFHost" value="CustomApp" /> 

,然後評估該值,並根據在你回來的時候,打開WebConfigurationManager或者只是打開ConfigurationManager。

你可能會認爲你可以檢查HttpContext的存在:如果它是NULL,那麼你運行在一個自定義應用程序中,如果它不是NULL,那麼這是web場景。但這是行不通的,因爲你可以在IIS中託管一個WCF服務(因此你有一個web.config諮詢),但沒有ASP.NET兼容性設置,在這種情況下,HttpContext將爲NULL 即使你在虛擬主機場景中運行。

一種選擇是,以檢查此設置在這裏:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile 

這將包含完整路徑添加到當前的AppDomain的配置文件 - 如果它是一個web應用程序,這將包含在最終的路徑+ web.config

所以,如果你檢查

if(Path.GetFileName(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile) == "web.config") 

,你可以確信你在一個web應用程序,你有一個web.config來看待。