Pasé mucho tiempo averiguando cómo configurar mis servicios WCF para que funcionen para https en el entorno de producción.¿Cómo puedo combinar la configuración de los servicios WCF para http y https en un web.config?
Básicamente, lo que necesitaba hacer esto:
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
<services>
<service name="MyNamespace.MyService" behaviorConfiguration="MyServiceBehavior">
<endpoint address="" bindingNamespace="https://secure.mydomain.com" binding="basicHttpBinding" bindingConfiguration="HttpsBinding" contract="MyNamespace.IMyService"/>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="HttpsBinding">
<security mode="Transport">
<transport clientCredentialType="None"></transport>
</security>
</binding>
</basicHttpBinding>
</bindings>
añadiendo el atributo bindingNamespace
al punto final es la última cosa que hace que funcione.
Pero esta configuración no funciona en mi entorno de desarrollo local donde estoy trabajando con http habitual. Así que mi config existe:
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
<services>
<service name="MyNamespace.MyService" behaviorConfiguration="MyServiceBehavior">
<endpoint address="" binding="basicHttpBinding" contract="MyNamespace.IMyService"/>
</service>
</services>
Las diferencias aquí son que he establecido el atributo httpsGetEnabled
a falso, y me quitaron el bindingConfiguration y bindingNamespace.
El problema es: ¿cómo puedo crear un bloque de configuración que maneje TANTO?
Realmente odio tener que hacer muchas modificaciones especiales a la configuración cada vez que hago un lanzamiento. Sí, sé que podría tener una tarea de creación posterior que cambie automáticamente los valores, pero me gustaría fusionar las configuraciones si es posible.
que hemos probado algo como esto:
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
<services>
<service name="MyNamespace.MyService" behaviorConfiguration="MyServiceBehavior">
<endpoint address="" binding="basicHttpBinding" contract="MyNamespace.IMyService"/>
<endpoint address="" bindingNamespace="https://secure.mydomain.com" binding="basicHttpBinding" bindingConfiguration="HttpsBinding" contract="MyNamespace.IMyService"/>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="HttpsBinding">
<security mode="Transport">
<transport clientCredentialType="None"></transport>
</security>
</binding>
</basicHttpBinding>
</bindings>
que pensé que poner los dos puntos finales le daría dos opciones para buscar la hora de activar el servicio. Sin embargo, esto no funciona. Obtengo este error:
No se pudo encontrar una dirección base que coincida con el esquema https para el punto final con enlace BasicHttpBinding. Los esquemas de direcciones base registradas son [http].
Al mirar alrededor de SO y el resto de Internet, parece que otros han tenido problemas para matar a este dragón.
¿Está alojando su servicio WCF en IIS, o es usted autónomo? –
Se alojan como archivos .svc en una aplicación web ASP.NET. Usando IIS7 en ambos dev y prod. – sohtimsso1970
@ sohtimsso1970: ¿Encontraste una solución para esto? – Learner