2009-05-03 17 views
36

Ponieważ obecnie uczę się korzystać z usług WCF, nieustannie napotykam samouczki w Internecie, które wspominają o korzystaniu z usługi ServiceHost podczas korzystania z usługi WCF.WCF: Co to jest ServiceHost?

Czym dokładnie jest ta ServiceHost?


W moim obecnym projekcie używam usługi WCF i mające odniesienie do niego z mojej aplikacji i kiedy chcę, aby spożywać go z mojej aplikacji po prostu instancję Jego ServiceClient jak takie:

new MusicRepo_DBAccess_ServiceClient(new InstanceContext(instanceContext), customBinding, endpointAddress); 

i wtedy dostęp do moich metod internetowych (OperationContract y) tej instancji (oczywiście otwierając go przed czasochłonne metody i zamykania go potem z Open i Close)

My Usługa WCF jest hostem w moich usługach IIS i po prostu uzyskuję dostęp do .svc z mojej aplikacji, aby utworzyć instancję ServiceClient.

Dlaczego więc i gdzie jest używana ServiceHost?

Odpowiedz

29

ServiceHost zasadniczo zapewnia wszystko, czego potrzebujesz do obsługi usługi WCF w ustawieniach innych niż IIS lub WAS. Typowym miejscem na ServiceHost będzie aplikacja konsolowa lub usługa Windows. Zobacz przykładowy kod z MSDN dla how to setup a ServiceHost in a console app.

+18

Prawie poprawne. - nawet usługi IIS i WAS będą używać obiektu ServiceHost do obsługi usługi WCF - po prostu tworzą ją i automatyzują ją za plecami. –

+4

Tak, właśnie próbowałem opisać, kiedy zobaczysz ServiceHost we własnym kodzie. Usługa IIS/WAS ServiceHost zazwyczaj nie jest dostępna bezpośrednio przez programistę. –

+0

Tak, to prawda - ServiceHost jest prawie niewidoczny w scenariuszu IIS/WAS :) –

23

Twoja implementacja usług jest po prostu klasą .NET - musisz mieć dla niej środowisko uruchomieniowe, aby mogło zostać wykonane w jakiś sposób. Do tego służy ServiceHost - załaduje twoją klasę usług, skonfiguruje punkty końcowe i słuchaczy kanałów i wszystko to, a tym samym nada twojej klasie usługowej "ekosystem" do życia i działania.

Możesz albo utworzyć instancję klasa ServiceHost w aplikacji konsolowej, usłudze Windows, a nawet aplikacji WinForm, dzięki czemu klasa usług WCF jest dostępna dla świata zewnętrznego - lub możesz przekazać tę pracę do IIS lub WAS. Nawet IIS lub WAS użyje ServiceHost udostępnić swoje usługi WCF - po prostu zrób to automagicznie za kulisami, i „na żądanie” - gdy wniosek o usługi WCF jest w

Marc

+1

użyłbyś tego w testach TDD, gdzie chcesz przetestować połączenia, takie jak wysyłanie konkretnych nagłówków lub danych do żądania http (WebOperationContext) do metod usługi wcf? – PositiveGuy