2012-04-29 64 views
20

Soy nuevo en WCF. Desarrollé un ejemplo de servicio WCF. Mi servicio usa el enlace basicHttp.¿Cómo alojar mi servicio WCF en mi sitio web?

Alojo mi servicio en IIS local 7.5 usando WAS y funciona bien. Ahora quiero alojar mi servicio en mi sitio web.

Busco Google pero la mayoría de ellos están alojados en localhost en IIS. Por favor dime como hacer eso? Será mejor referir algún tutorial o guía paso a paso.

+2

Ver: [Cómo recibir un servicio WCF en IIS] (http://msdn.microsoft.com/en-us/library/ms733766.aspx): si ese 'localhost' o cualquier otro servidor es totalmente irrelevante, simplemente siga esos pasos. –

Respuesta

35

Usted tiene básicamente dos opciones, creo:

Opción 1 - "bin" desplegar (opción preferida)

  1. compilar su servicio WCF en un (biblioteca de clases) DLL
  2. crear un sitio web en IIS
  3. copiar las DLL de WCF en la carpeta .\bin del sitio web
  4. crear un *.svc archivo en ese sitio web
  5. añadir una adecuada web.config en la carpeta del sitio web a definir sus puntos finales y configuración de servicios, etc.

Su servicio WCF ahora será accesible en la dirección base de la página web, más el nombre de la *.svc archivo, por ejemplo

http://myserver/someweb/Myservice.svc 

Su *.svc sería algo como esto:

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

Los atributos Service= denota la clase que implementa el servicio - completo con su espacio de nombres.

Opción 2 - cosas poner en App_Code

  1. crear un sitio web en IIS
  2. poner todo su WCF relacionados *.cs archivos directamente en la carpeta .\App_Code
  3. crear un archivo *.svc en ese sitio web
  4. agregue un web.config apropiado en la carpeta del sitio web para definir sus puntos finales y la configuración del servicio, etc.

Su servicio WCF ahora será accesible en la dirección base del sitio web, más el nombre del archivo *.svc, p. Ej.

http://myserver/someweb/Myservice.svc 

Su *.svc sería algo como esto:

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

Un simple, muestra web.config podría ser algo como esto:

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

Es, básicamente, definir su etiqueta <service> - y otra vez: el name= denota la clase que implementa el servicio, totalmente calificado con su espacio de nombres. Debe contener al menos un punto final (un punto final "mex" es opcional) pero muy útil, especialmente para el desarrollo y las pruebas. Le permite al cliente "descubrir" el servicio y obtener su descripción del servicio para que pueda interactuar con él.

Una vez que su servicio se implementa en IIS, puede verlo en acción utilizando una herramienta como la WCF Test Client que se incluye de forma gratuita con WCF, o SoapUI que es una utilidad de pruebas de SOAP de propósito general (con una edición gratuita para que usted pueda utilizar).

+1

Error en la opción 2 de comportamientoConfiguration = "true" correcto es behaviorConfiguration = "WithDebug" –

+0

@PavelJedlicka: tiene toda la razón, gracias por señalar este error, reparado. –

3

hilo de edad, si alguien lo encuentra ... pero en lugar de su * .svc también se puede crear en su global.asax:

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

Me enfrento a un problema similar. ¿Puedes por favor elaborar tu respuesta? –

+0

@ mav3n: si aloja un sitio web Y desea alojar un servicio WCF (en su sitio web), puede agregar el código anterior en el archivo global.asax. De esta forma, no necesita agregar un archivo * .svc separado. Crearías un servicio como lo harías siempre. En mi ejemplo, he usado Ninject, pero obviamente puedes usar el constructor predeterminado. – Roelant

Cuestiones relacionadas