Ten artykuł pochodzi z serii przygotowań do egzaminu 70-503: Windows Communication Foundation.
Konfiguracja punkty wyjściowego (ang. endpoint) po stronie klienta przypomina tą, którą określa się w serwisie. Tak zwane ABC konfiguracji serwisu to address, binding, oraz contract. Konfiguracja może zostać przeprowadzona w sposób deklaratywny – z wykorzystaniem plików konfiguracyjnych, lub imperatywnie – przez kod.
Przykładowa deklaracja w postaci znaczników XML:
1: <system.serviceModel>
2: <client>
3: <endpoint address="http://localhost:8080/UpdateService"
4: binding="wsHttpBinding"
5: contract="IUpdateService"
6: name="WSHttpBinding_IUpdateService">
7: </endpoint>
8: </client>
9: </system.serviceModel>
W C# będzie to wyglądało następująco:
1: EndpointAddress endpoint = new EndpointAddress("http://localhost:8080/UpdateService");
2: UpdateServiceProxy proxy = new UpdateServiceProxy(new WSHttpBinding(), endpoint);
Adres określa położenie serwisu, binding określa sposób komunikacji, kontrakt – dostępne metody. Atrybut name nadaje nazwę punktowi wyjściowemu, przez co można odwołać się do niego w sposób programowy:
1: UpdateServiceProxy proxy = new UpdateServiceProxy("WSHttpBinding_IUpdateService");
Jeżeli korzystamy ze standardowych bindingów zastosowane zostaną ich domyślne ustawienia. Aby określić dodatkowe opcje należy wykorzystać bindingConfiguration:
1: <system.serviceModel>
2: <client>
3: <endpoint address="http://localhost:8080/UpdateService"
4: binding="WSHttpBinding"
5: bindingConfiguration="NameOfBinding"
6: contract="IUpdateService" />
7: </client>
8: <bindings>
9: <WSHttpBinding>
10: <binding name="NameOfBinding"
11: receiveTimeout="00:10:00"
12: sendTimeout="00:10:00"
13: openTimeout="00:10:00"
14: closeTimeout="00:10:00" />
15: </WSHttpBinding>
16: </bindings>
17: </system.serviceModel>
Tworzymy binding programowo z wczytaniem powyższych opcji:
1: WSHttpBinding binding = new WSHttpBinding("NameOfBinding");
W sekcji behaviorConfiguration możemy określić zachowanie bindingu:
1: <system.serviceModel>
2: <client>
3: <endpoint address="http://localhost:8080/UpdateService"
4: binding="WSHttpBinding"
5: behaviorConfiguration="UpdateClient"
6: contract="IUpdateService" />
7: </client>
8: <behaviors>
9: <endpointBehaviors>
10: <behavior name="UpdateClient">
11: <clientCredentials>
12: <windows allowedImpersonationLevel="Identification" />
13: </clientCredentials>
14: </behavior>
15: </endpointBehaviors>
16: </behaviors>
17: </system.serviceModel>
Element clientCredentials zapewnia wysłanie danych dotyczących uwierzytelniania i autoryzacji do serwisu.
Informacje dodatkowe
Wymienione wcześniej elementy to nie wszystkie, które można zastosować konfigurując endpoint. Przykładowym elementem, który można dodać jest header. Kiedy zostanie on zdefiniowany w pliku konfiguracyjnym, przy każdym żądaniu do serwisu. Przykładowa konfiguracja z wykorzystaniem nagłówków:
1: <system.serviceModel>
2: <client>
3: <endpoint address="http://localhost:8080/UpdateOrder"
4: binding="wsHttpBinding"
5: contract="IUpdateService"
6: name="WSHttpBinding_UpdateOrder">
7: <headers>
8: <Priority xmlns="http://tempuri.org/">Expedite</Priority>
9: </headers>
10: </endpoint>
11: <endpoint address="http://localhost:8080/CancelOrder"
12: binding="wsHttpBinding"
13: contract="IUpdateService"
14: name="WSHttpBinding_CancelOrder">
15: <headers>
16: <Priority xmlns="http://tempuri.org/">Standard</Priority>
17: </headers>
18: </endpoint>
19: </client>
20: </system.serviceModel>
W powyższym przykładzie zostały zdefiniowane dwa punkty wyjściowe. W zależności od tego, który zostanie wykorzystany podczas żądania, w nagłówku zostanie przekazana wartość Standard lub Expedite (przyspieszony). Serwis w zależności od tej wartości może inaczej obsłużyć żądanie.
W następnej lekcji – dynamiczna konfiguracja serwisu.