una que para extremo esquema enlace encontró enable dirección consume configurar configuracion con coincida wcf iis ssl https wcf-binding

que - wcf service c# https



Despliegue del servicio WCF con enlaces/puntos finales http y https (4)

Al final, decidimos ir con archivos externos usando el atributo configSource para las secciones de vinculaciones, comportamientos y servicios de web.config, de la siguiente manera:

<bindings configSource="bindings.config" /> <behaviors configSource="behaviors.config" /> <services configSource="services.config" />

De esta forma, lo implementamos de manera predeterminada con esos archivos externos configurados para acceso http únicamente, y le damos instrucciones al cliente (o lo ayudamos) sobre cómo editar los archivos externos para configurar el acceso https. Esto también nos permite implementar cambios futuros en el web.config mismo sin sobreescribir los archivos de configuración externos.

He escrito un servicio web WCF para el consumo de una aplicación de Silverlight. Inicialmente, el servicio solo requería un enlace HTTP básico. Ahora necesitamos poder implementar el servicio para usar tanto en http como en https. He encontrado algunas configuraciones para web.config que me permiten hacer esto de la siguiente manera:

<system.serviceModel> <behaviors> <endpointBehaviors> <behavior name="SilverlightFaultBehavior"> <silverlightFaults /> </behavior> </endpointBehaviors> <serviceBehaviors> <behavior name="CxtMappingWebService.CxtMappingWebServiceBehavior"> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="True" /> </behavior> </serviceBehaviors> </behaviors> <bindings> <basicHttpBinding> <binding name="SecureHttpBinding"> <security mode="Transport" /> </binding> <binding name="BasicHttpBinding"> <security mode="None" /> </binding> </basicHttpBinding> </bindings> <services> <service name="CxtMappingWebService.CxtMappingWebService" behaviorConfiguration="CxtMappingWebService.CxtMappingWebServiceBehavior"> <endpoint address="" bindingConfiguration="SecureHttpBinding" binding="basicHttpBinding" contract="CxtMappingWebService.ICxtMappingWebService" behaviorConfiguration="SilverlightFaultBehavior" /> <endpoint address="" bindingConfiguration="BasicHttpBinding" binding="basicHttpBinding" contract="CxtMappingWebService.ICxtMappingWebService" behaviorConfiguration="SilverlightFaultBehavior" /> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service> </services> </system.serviceModel>

Lamentablemente, sin embargo, hay un problema con esto.

Este servicio web debe implementarse en cientos de servidores de nuestros clientes, y no todos usarán https. Desplegarlo en un servidor que no tiene un enlace https configurado en IIS hace que falle. ¿Hay alguna manera de tener estos dos enlaces en la web.config por defecto sin que se agote si no hay un enlace https configurado en IIS?

Tenemos una posible solución para este problema, pero en realidad no se adapta bien a nuestros requisitos de implementación.

¿Alguien más ha encontrado algo como esto antes, y cómo lo resolvió?


Dos de tus puntos finales tienen el mismo URI. Esto no está permitido en WCF. Debería poder especificar puntos finales con enlaces diferentes, pero los URI deben ser diferentes (es decir, diferente número de puerto o contrato diferente).


Esto sería manejado por el instalador que usa para implementar el servicio. Debe ser un requisito previo (o al menos dejar una opción en el instalador) para implementar ambos puntos finales o solo el http.


La respuesta aceptada en esta página no es de mucha utilidad si no utiliza un instalador. La respuesta correcta radica en una edición posterior por parte del OP, todo lo que uno necesita hacer es vincular los puertos http y https en IIS y luego usar la configuración a continuación.

<service name="CxtMappingWebService.CxtMappingWebService" behaviorConfiguration="CxtMappingWebService.CxtMappingWebServiceBehavior"> <endpoint address="" bindingConfiguration="SecureHttpBinding" binding="basicHttpBinding" contract="CxtMappingWebService.ICxtMappingWebService" behaviorConfiguration="SilverlightFaultBehavior" /> <endpoint address="" bindingConfiguration="BasicHttpBinding" binding="basicHttpBinding" contract="CxtMappingWebService.ICxtMappingWebService" behaviorConfiguration="SilverlightFaultBehavior" /> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service>

¡Eso funcionó bien para mí!