niedziela, 15 września 2013

Konsumowanie serwisu

Aby można było korzystać z serwisu można zastosować jedną z kilku dostępnych metod. W zależności od naszych preferencji możemy skorzystać z następujących narzędzi:
  • bezpośrednio z klasy ChannelFactory<T> kiedy mamy dostęp do interfejsu servisu
  • dodanie referencji do serwisu z poziomu Visual Studio
  • narzędzie svcutil.exe
Pierwszy sposób jest bardzo wygodny. Wymaga jednak współdzielenia biblioteki zawierającej interfejs serwisu co nie zawsze jest możliwe do osiągnięcia.
Użycie klasy jest niezwykle proste:


Code:
            var channelFactory = new ChannelFactory<IService1>(new BasicHttpBinding(),
                new EndpointAddress("http://localhost/MyService/"));
            var channel = channelFactory.CreateChannel();
            var data = channel.GetData(10);
            Console.WriteLine(data);
            //Close channel
            ((IClientChannel)channel).Close();
            //Close factory
            channelFactory.Close();

Należy przy tym pamiętać, że kanał należy zamknąć w celu odzyskania zasobów. Drugą ważną informacją jest to, iż gdy wystąpi jakiś błąd, nie możemy użyć metody Close. W takim przypadku należy skorzystać z metody Abort.
W pokazanym przypadku powyżej, dane konfiguracyjne zostały podane w kodzie. Klasa ChannelFactory<T> posiada klika różnych konstruktorów. Jeden z nich przyjmuje nazwę konfiguracji z app/web config. W takim przypadku możemy konfigurację zapisać w pliku i zmienić ją w czasie działania programu bez potrzeby jej ponownej kompilacji. 

Dodanie referencji z poziomu Visual Studio jest bardzo proste. Klikamy prawym klawiszem myszy na projekt i dodajemy Service Reference:






W oknie które się pojawi możemy wpisać adres serwisu lub, jeżeli serwis jest uruchomiony na tej samej maszynie wystarczy kliknąć przycisk Discover. Spowoduje to odnalezienie wszystkich serwisów udostepnionych na tej maszynie:


Po kliknięciu w przycisk OK zostaną wygenerowane klasy typów oraz klasa Proxy zawierająca metody interfejsu. 

Kolejną możliwością jest użycie narzędzia svcutil.exe (ServiceModel Metadata Utility Tool). Jest to proste narzędzie konsolowe. Znaleźć je możemy tam gdzie zainstalowane jest Microsoft SDKs. W moim przypadku jest to ścieżka: C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools.
Narzędzie jest bardzo proste w obsłudze. Przykład:


Narzędzie udostępnia wiele różnych przełączników umożliwiających m.in. wybranie serializatora, podanie danych uwierzytelniania itp.

Po zakończeniu działania programu w wybranym katalogu zostaną wygenerowane dwa pliki: .cs z kodem dla klienta oraz plik konfiguracyjny (dane dotyczące endpointa):



Na temat narzędzia svcutil można bardzo dużo informacji znaleźć w internecie jak i na stronach msdn.

Który sposób jest najlepszy? Jeżeli mamy bezpośredni dostęp do interfejsu - najwygodniejszym narzędziem będzie ChannelFactory<T>. W przypadku gdy nie mamy takiego dostępu możemy skorzystać z Visuala lub svcutil.exe. To drugie narzędzie jest szczególnie przydatne jeżeli chcemy dostosować wygenerowany kod do naszych potrzeb, a w przypadku aktualizacji chcemy mieć nad tym pełną kontrolę.

Brak komentarzy:

Prześlij komentarz