2010-11-24 12 views
6

Mi servicio WCF expone un https Y un punto final http. Además de SSL, son idénticos. Ellos asignan el mismo código.¿Cómo configurar el servicio WCF desde el código cuando se aloja en IIS?

La intención última es que los usuarios externos se conecten a través de https, los usuarios internos utilicen http.

En desarrollo esto me da un problema. Cassini, el servidor web de desarrollo empaquetado en VS, odia SSL.

Me pregunto si puedo configurar el servicio desde el código, por lo que cuando se ejecuta en Cassini, no configuro https.

De ahí la pregunta: ¿cómo configuro el servicio desde el código si está alojado en IIS? Estaría muy feliz con las respuestas alternativas sobre cómo puedo persuadir a Cassini para que NO se queje sobre la parte https de la configuración.

Respuesta

3

Cuando está hospedando en IIS, está dejando mucho cuidado en el ámbito de IIS: en este caso, realmente no puede controlar su servicio.

IIS se encargará de hacer girar el necesario ServiceHost en función de su archivo * .svc, no mucho de lo que puede hacer al respecto, realmente.

Mi solución sería diferente - externalizar la etiqueta <service> en el archivo de configuración (web.config):

<system.serviceModel> 
    <services>  
    <service configSource="service.dev.config" /> 
    </services> 
</system.serviceModel> 

en su entorno de desarrollo, sólo se exponga el extremo HTTP - para que su service.dev.config sería algo como esto:

<service name="....."> 
    <endpoint name="default" 
       address="....." 
       binding="basicHttpBinding" bindingConfiguration="insecure" 
       contract="......" /> 
</service> 

Crear una segunda service.prod.config que a su vez contiene los dos puntos finales - http y https:

<service name="....."> 
    <endpoint name="default" 
       address="....." 
       binding="basicHttpBinding" bindingConfiguration="insecure" 
       contract="......" /> 
    <endpoint name="secure" 
       address="....." 
       binding="basicHttpBinding" bindingConfiguration="secure" 
       contract="......" /> 
</service> 

y referencia que en su web.config en el servidor de implementación.

+1

Tenía la sensación de que esto era lo mejor que podría lograr. Gracias. – RichardHowells

+0

Tengo varios servicios, por lo que eventualmente exterioricé toda la sección . El xml intellisense para web.config parece decir que no puede usar configSource en la etiqueta de servicios. Ignoré el intellisense y funciona. – RichardHowells

+0

@RichardHowells: sí, el Visual Studio intellisense no es tan inteligente acerca de esto, pero funciona, como has visto :-) –

9

"IIS se ocupará de hacer girar el ServiceHost necesario en función de su archivo * .svc, no mucho de lo que puede hacer al respecto realmente".

No está demasiado cerca de la verdad. Exactamente en el archivo SVC de su servicio hay un atributo llamado Factory. Donde puede especificar la clase y la aseveración donde se encuentra la clase. Esta clase puede ser su propio descendiente de web | DataServiceHostFactory Así que su margen de beneficio SVC sería así

<%@ ServiceHost 
Language="C#" 
Debug="true" 
Service="name.space.myService" 
CodeBehind="name.space.myService.svc.sc" 
Factory = "name.space.WebServiceHostFactoryEx, assembly.name" 
%> 

Se creará la WebServiceHostFactory por cada golpe servicio y volverá a crear su anfitrión de la forma que desee.

También necesitará heredar WebServiceHost y crearlo de la manera que lo necesite con ciertos ajustes de endpoins, comportamientos, direcciones, etc., lo que quiera.

Hay muy buen puesto de Michele Bustamante here

estoy usando esto en IIS alojado ambiente por un par de servicios que se inicializan misma manera.

Cuestiones relacionadas