2012-04-29 21 views
20

Jestem nowy w WCF. Opracowałem przykładową usługę WCF. Moja usługa używa powiązania basicHttp.Jak hostować moją usługę WCF na mojej stronie?

Hostuję swoją usługę w lokalnym IIS 7.5 przy użyciu WAS i działa dobrze. Teraz chcę udostępnić moją usługę na mojej stronie internetowej.

Przeszukuję Google, ale większość z nich jest hostowana w localhost w IIS. Powiedz mi, jak to zrobić? Lepiej będzie odwołać się do tutoriala lub przewodnika krok po kroku.

+2

zobacz: [Jak hosta usługi WCF w IIS] (http://msdn.microsoft.com/en-us/library/ms733766.aspx) - czy to 'localhost' lub jakikolwiek inny serwer jest całkowicie nieistotny - wystarczy wykonać te kroki. –

Odpowiedz

35

Masz w zasadzie dwie opcje, wierzę:

Wariant 1 - "bin" wdrożyć (opcja preferowana)

  1. skompilować usługę WCF w DLL (biblioteki klas)
  2. utwórz stronę internetową w IIS
  3. skopiuj pliki DLL WCF do folderu .\bin witryny internetowej
  4. utwórz *.svc plików w tej witrynie
  5. dodać odpowiednią web.config w folderze strony, aby zdefiniować swoje punkty końcowe i konfigurację usługi itp

Usługa WCF będzie teraz osiągalny pod adresem bazowej witryny, plus nazwa *.svc plik, np

http://myserver/someweb/Myservice.svc 

Twój *.svc będzie wyglądać mniej więcej tak:

<%@ ServiceHost Language="C#" Debug="true" 
    Service="WCF_Simple_Service.HelloIndigoService" %> 

The Service= atrybuty oznacza klasę wykonawczą służby - pełną z jego nazw.

Wariant 2 - umieścić rzeczy w App_Code

  1. stworzenie strony internetowej w IIS
  2. umieścić wszystkie swoje WCF związane *.cs pliki bezpośrednio do folderu .\App_Code
  3. utworzyć plik *.svc w tej witrynie
  4. dodać odpowiedni folder web.config do zdefiniowania punktów końcowych i konfiguracji usługi itp.

Twoja usługa WCF będzie teraz dostępna pod adresem bazowym witryny, a także pod nazwą pliku *.svc, np.

http://myserver/someweb/Myservice.svc 

Twój *.svc będzie wyglądać mniej więcej tak:

<%@ ServiceHost Language="C#" Debug="true" 
    Service="Service" 
    CodeBehind="~/App_Code/Service.cs" %> 

Prosty, próbka web.config może wyglądać mniej więcej tak:

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="WithDebug"> 
       <serviceMetadata httpGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    <services> 
    <service name="SimpleWCF.HelloIndigoService" behaviorConfiguration="WithDebug"> 
     <endpoint 
      address="" 
      binding="basicHttpBinding" 
      contract="SimpleWCF.IHelloIndigoService" /> 
     <endpoint 
      address="mex" 
      binding="mexHttpBinding" 
      contract="IMetadataExchange" /> 
    </service> 
    </services> 
</system.serviceModel> 

Zasadniczo zdefiniować tag <service> - i znowu: name= oznacza klasę implementującą usługę - pełną kwalifikację z jej przestrzenią nazw. Musi zawierać co najmniej jeden punkt końcowy - punkt końcowy "mex" jest opcjonalny - ale bardzo przydatny, szczególnie do programowania i testowania. Pozwala to klientowi "odkryć" usługę i uzyskać jej opis usługi, aby mógł się z nią połączyć.

Gdy usługa jest wdrażane w IIS, można zobaczyć go w akcji za pomocą narzędzia jak WCF Test Client że statki za darmo z WCF lub SoapUI który jest narzędziem do testowania SOAP ogólnego przeznaczenia (z bezpłatnej wersji dla was posługiwać się).

+1

Błąd w opcji 2 behaviorConfiguration = "true" correct to behaviorConfiguration = "WithDebug" –

+0

@PavelJedlicka: masz absolutną rację - dziękuję za wskazanie tego błędu - naprawiono! –

3

stary wątek, jeśli ktoś uzna to za ... ale zamiast swojego * .svc Można również tworzyć w global.asax:

static Global() 
{ 
    RouteTable.Routes.Add(new ServiceRoute("ExternalServices/SOAP/test", new  ninjectServiceHostFactory(), typeof(testService))); 
} 
+0

Mam do czynienia z podobnym problemem. Czy możesz rozwinąć swoją odpowiedź? –

+0

@ mav3n: Jeśli hostujesz stronę internetową I chcesz hostować usługę WCF (na swojej stronie), możesz dodać powyższy kod w pliku global.asax. W ten sposób nie trzeba dodawać osobnego pliku * .svc. Stworzyłbyś taką usługę, jaką zawsze robiłbyś. W moim przykładzie użyłem programu Ninject, ale oczywiście można użyć domyślnego konstruktora. – Roelant

Powiązane problemy