2013-05-15 119 views
15

在這裏,我想通過名字從web.config中讀WCF服務端點地址

ClientSection clientSection = (ClientSection)ConfigurationManager.GetSection("system.serviceModel/client"); 
var el = clientSection.Endpoints("SecService"); // I don't want to use index here as more endpoints may get added and its order may change 
string addr = el.Address.ToString(); 

閱讀我的服務端點地址是否有基於名稱的方式,我可以讀終點地址?

這裏是我的web.config文件

<system.serviceModel> 
<client> 
    <endpoint address="https://....................../FirstService.svc" binding="wsHttpBinding" bindingConfiguration="1ServiceBinding" contract="abc.firstContractName" behaviorConfiguration="FirstServiceBehavior" name="FirstService" /> 
    <endpoint address="https://....................../SecService.svc" binding="wsHttpBinding" bindingConfiguration="2ServiceBinding" contract="abc.secContractName" behaviorConfiguration="SecServiceBehavior" name="SecService" /> 
    <endpoint address="https://....................../ThirdService.svc" binding="wsHttpBinding" bindingConfiguration="3ServiceBinding" contract="abc.3rdContractName" behaviorConfiguration="ThirdServiceBehavior" name="ThirdService" /> 
      </client> 
    </system.serviceModel> 

這將工作clientSection.Endpoints[0];,但我在尋找一種方法以名稱檢索。

I.e.像clientSection.Endpoints["SecService"],但它不起作用。

+0

而您的問題是....?你有錯誤嗎?沒有結果? – Tim

+0

只有使用ConfigurationManager才能得到它嗎? – Kiquenet

回答

13

我想你必須真正通過端點迭代:

string address; 
for (int i = 0; i < clientSection.Endpoints.Count; i++) 
{ 
    if (clientSection.Endpoints[i].Name == "SecService") 
     address = clientSection.Endpoints[i].Address.ToString(); 
} 

您可以通過按鍵獲取端點。使用方括號與名稱。

+0

好的解決方案。我只是用它。謝謝 –

4

好,每個客戶端的端點有一個 - 只需使用實例是命名您的客戶端代理:

ThirdServiceClient client = new ThirdServiceClient("ThirdService"); 

這樣做會自動讀取配置文件中的正確的信息。

+1

也許歐普沒有客戶端代理? – McGarnagle

+0

如果你不想使用ThirdServiceClient類?只使用ConfigurationManager? – Kiquenet

10

這是使用LINQ和C#是我怎麼沒6.

首先獲得客戶端部分:

var client = ConfigurationManager.GetSection("system.serviceModel/client") as ClientSection; 

然後得到這等於endpointName端點:

var qasEndpoint = client.Endpoints.Cast<ChannelEndpointElement>() 
    .SingleOrDefault(endpoint => endpoint.Name == endpointName); 

然後從端點獲取網址:

var endpointUrl = qasEndpoint?.Address.AbsoluteUri; 

您還可以使用以下方式從端點界面獲取端點名稱:

var endpointName = typeof (EndpointInterface).ToString(); 
+0

感謝大家,少用代碼!!!,通過名稱(而不是索引鍵)獲得'EndPoint'你的第二個剪切代碼是一個很好的解決方案。 – Aria

+0

使用'as'強制轉換可以防止異常。不錯。 – GibralterTop