sobota, 14 września 2013

WCF - Hostowanie serwisu

W poprzednim poście został opisany sposób w jaki stworzyć prosty serwis.
Ten post omówi możliwości i sposoby hostowania serwisu.

Dowiedzieliśmy się już że serwis można hostować w innej aplikacji .NET za pomocą klasy ServiceHost. Klasa ta pozwala na hostowanie serwisu WCF w dowolnej aplikacji .NET.

Prawidłowa obsługa tworzenia instancji klasy ServiceHost przebiega w następujący sposób:


Code:
            var host = new ServiceHost(typeof(CustomerService), new Uri("net.tcp://localhost/netTCP"),
                    new Uri("http://localhost/CustomerService"));
            try
            {
                host.Open();
                Console.WriteLine("Press Enter to Exit");
                Console.Read();
                host.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                host.Abort();
            }

Drugą możliwością prawidłowej obsługi tworzenia klasy ServiceHost jest użycie bloku using, pokazany we wcześniejszym poście:


Code:
            using (var host = new ServiceHost(typeof(CustomerService), new Uri("net.tcp://localhost/netTCP"), new Uri("http://localhost/CustomerService")))
            {
                host.Open();
                host.Description.Endpoints.ToList().ForEach(endPoint => Console.WriteLine(endPoint.ListenUri));
                Console.WriteLine("Press Enter to Exit");
                Console.Read();
            }


Czym różni się Close od Abort:
  • Close - standardowy sposób zamykania kanału komunikacji w wyniku którego:
    • operacje które trwają nie zostaną przerwane
    • możemy tę operację przeprowadzić asynchronicznie
    • zwalnia zasoby
    • może rzucić wyjątkiem CommunicationException lub TimeoutException
  • Abort - wymuszone zamknięcie kanału komunikacji
    • zamyka kanał bez oczekiwania na zakończenie operacji, które są w toku
Abort stosujemy kiedy na kanale komunikacyjnym wystąpił wyjątek. W przypadku, gdy na kanale który rzucił wyjątkiem zastosujemy operację Close, kanał rzuci kolejnym wyjątkiem, którego możemy zapomnieć obsłużyć.

W przypadku wyboru Self hostingu najlepszym typem aplikacji do hostowania serwisu WCF jest Windows Service. Powody, dla których warto korzystać z Windows Service w celu hostowania WCF:
  • Zapewnione wznawianie usługi w przypadku wystąpienia błędów
  • Konfigurowalne zachowanie uruchamiania aplikacji
  • Konfiguracja zabezpieczeń
Dlaczego możemy chcieć hostować aplikację w ten sposób?
  • kiedy chcemy aby nasz serwis działał w aplikacji klienckiej 
  • kiedy serwis ma działać InProc czyli w tym samym procesie co aplikacja główna
  • kiedy nie możemy użyć IIS
  • kiedy chcemy mieć nieograniczone możliwości konfiguracji i rozszerzania serwisu 
W przypadku gdy skorzystamy ze zwyczajnej aplikacji (np. konsolowej) powyższe rzeczy będą musiały zostać zaimplementowane osobno.


Inną metodą hostowania aplikacji WCF jest wykorzystanie serwera IIS. Jest to jeden z popularniejszych sposobów hostowania aplikacji.
Hostowanie aplikacji na IIS ma szereg zalet:
  • hostowanie aplikacji WCF przebiega w ten sam sposób jak aplikacji webowych
  • udostępnione są narzędzia do monitorowania, zarządzania i kontroli hostowanej aplikacji
  • możliwość wykorzystania współdzielenia tego samego procesu do obsługi wielu aplikacji w celu zmniejszenia obciążenia na serwerze przez dużą ilość serwisów 

Jeżeli chcemy mieć pełną kontrolę nad cyklem życia aplikacji WCF najlepiej skorzystać z hostowania w Windows Service. W innym przypadku warto wybrać IIS.

W jaki sposób hostować aplikację na IIS? Bardzo dobrze opisane jest to na stronie MSDN: http://msdn.microsoft.com/pl-pl/library/ms733766.aspx

Brak komentarzy:

Prześlij komentarz