2012-04-29 4 views
20

Sono nuovo di WCF. Ho sviluppato un servizio WCF di esempio. Il mio servizio utilizza l'associazione basicHttp.Come ospitare il mio servizio WCF nel mio sito web?

Ospito il mio servizio in IIS 7.5 locale utilizzando WAS e funziona correttamente. Ora voglio ospitare il mio servizio nel mio sito web.

Cerco Google ma la maggior parte di essi sono ospitati in localhost in IIS. Per favore dimmi come posso farlo? Sarà meglio fare riferimento ad alcuni tutorial o guida passo passo.

+2

See: [Come ospitare un servizio WCF in IIS] (http://msdn.microsoft.com/en-us/library/ms733766.aspx) - che sia 'localhost' o qualsiasi altro server è totalmente irrilevante - basta seguire questi passaggi. –

risposta

35

Avete fondamentalmente due opzioni, credo:

Opzione 1 - "bin" distribuire (opzione preferita)

  1. compilare il servizio WCF in un (libreria di classi) DLL
  2. creare un sito Web in IIS
  3. copiare le DLL WCF nella cartella .\bin del sito Web
  4. creare un *.svc file in quel sito
  5. aggiungere un adeguato web.config nella cartella sito per definire endpoint e la configurazione del servizio, ecc

vostro servizio WCF sarà ora essere raggiungibile su indirizzo di base del sito, più il nome del *.svc file, ad es

http://myserver/someweb/Myservice.svc 

tuo *.svc sarebbe simile a questa:

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

I Service= attributi indica la classe che implementa il servizio - completo con il suo spazio dei nomi.

Opzione 2 - roba messo in App_Code

  1. creare un sito web in IIS
  2. mettere tutte le WCF relative *.cs file direttamente nella cartella .\App_Code
  3. creare un file *.svc in quel sito
  4. aggiungi uno web.config appropriato nella cartella del sito Web per definire i tuoi endpoint e la configurazione del servizio, ecc.

Il servizio WCF sarà ora raggiungibile all'indirizzo di base del sito Web, più il nome del file *.svc, ad es.

http://myserver/someweb/Myservice.svc 

tuo *.svc sarebbe simile a questa:

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

Un semplice, campione web.config potrebbe essere simile a questa:

<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> 

Che, fondamentalmente, definire il tag <service> - e ancora: il name= indica la classe che implementa il servizio - completamente qualificato con il suo spazio dei nomi. Deve contenere almeno un endpoint: un endpoint "mex" è facoltativo, ma molto utile, specialmente per lo sviluppo e il test. Permette al cliente di "scoprire" il servizio e ottenere la sua descrizione del servizio in modo che possa interfacciarsi con esso.

Una volta che il servizio è distribuito in IIS, è possibile vedere in azione utilizzando uno strumento come il WCF Test Client fornito gratuitamente con WCF, o SoapUI che è un programma di utilità per tutti gli usi test SOAP (con una versione gratuita per voi uso).

+1

Errore nell'opzione 2 behaviorConfiguration = "true" corretto è behaviorConfiguration = "WithDebug" –

+0

@PavelJedlicka: hai assolutamente ragione - grazie per aver segnalato questo errore - risolto! –

3

vecchio filo, se qualcuno lo trova ... ma invece di vostro * .svc si può anche creare nella vostra global.asax:

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

Sto affrontando un problema simile. Puoi per favore elaborare la tua risposta? –

+0

@ mav3n: se si sta ospitando un sito Web E si desidera ospitare un servizio WCF (nel proprio sito Web), è possibile aggiungere il codice sopra nel global.asax. In questo modo non è necessario aggiungere un file * .svc separato. Crei un servizio come faresti sempre. Nel mio esempio ho usato Ninject, ma ovviamente puoi usare il costruttore predefinito. – Roelant