2013-05-15 12 views
15

Tutaj staram się przeczytać mój adres punktu końcowego usługi wg nazwy od web.configCzytaj WCF adres punktu końcowego usługi wg nazwy od web.config

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(); 

Czy istnieje sposób mogę odczytać adres punktu końcowego na podstawie nazwy ?

Oto moja web.config plik

<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]; będzie to działać, ale szukam sposób, aby odzyskać po imieniu.

tj. coś w rodzaju clientSection.Endpoints["SecService"], ale to nie działa.

+0

A twoje pytanie brzmi ...? Czy dostaję błędy? Brak wyników? – Tim

+0

Czy otrzymujesz go tylko za pomocą ConfigurationManager? – Kiquenet

Odpowiedz

13

Chyba trzeba faktycznie iterację punktów końcowych:

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

Można pobrać końcowy kluczem. Użyj kwadratowych nawiasów z nazwą.

+0

Dobre rozwiązanie. Po prostu go użyłem. Dzięki –

4

Cóż, każdy punkt końcowy po stronie klienta ma nazwę - tylko instancję serwera proxy klienta za pomocą że nazwisko:

ThirdServiceClient client = new ThirdServiceClient("ThirdService"); 

Spowoduje to automatycznie odczytać odpowiednie informacje z pliku konfiguracyjnego.

+1

Może Op nie ma proxy klienta? – McGarnagle

+0

Jeśli nie chcesz korzystać z klasy ThirdServiceClient? Używasz tylko Menedżera konfiguracji? – Kiquenet

10

To jak to zrobiłem przy użyciu LINQ i C# 6.

Pierwszy dostać sekcję Klient:

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

następnie uzyskać końcowy, który jest równy endpointName:

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

Następnie pobierz adres URL z punktu końcowego:

var endpointUrl = qasEndpoint?.Address.AbsoluteUri; 

Możesz również uzyskać nazwę punktu końcowego z interfejsu punktu końcowego, używając:

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

Dzięki człowieku, mniej kodu !!!, aby uzyskać 'EndPoint' po nazwie (nie klucz indeksu), twój drugi przecięty kod jest dobrym rozwiązaniem. – Aria

+0

casting przy użyciu 'as' zamiast tego zapobiega wyjątkom. miły. – GibralterTop

Powiązane problemy