consume - https con error WCF: "No se pudo encontrar la dirección base que coincide con el esquema https"
wcf transport security (7)
Voy a https://mywebsite/MyApp/Myservice.svc y obtengo el siguiente error:
(El enlace funciona si uso http: //)
" El servicio ''/MyApp/MyService.svc'' no se puede activar debido a una excepción durante la compilación. El mensaje de excepción es: No se pudo encontrar una dirección base que concuerde con el esquema https para el punto final con binding BasicHttpBinding. ] .. "
EDITAR: Entonces, si cambio la address=""
a la address="https:// ..."
entonces obtengo este error:
" Error: El protocolo ''https'' no es compatible ... El ChannelDispatcher en '' https://.../Annotation.svc '' con contrato (s) ''" Anotación "'' no puede abrir su IChannelListener. "
Web.Config
es como se ve mi Web.Config
:
<services>
<service behaviorConfiguration="AnnotationWCF.AnnotationBehavior"
name="AnnotationWCF.Annotation">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Annotation"
contract="AnnotationWCF.Annotation" />
<endpoint address=""
binding="basicHttpBinding" bindingConfiguration="SecureTransport"
contract="AnnotationWCF.Annotation" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_Annotation" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
<binding name="SecureTransport" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
¡Asegúrate de que SSL esté habilitado para tu servidor!
Obtuve este error cuando trato de usar un archivo de configuración HTTPS en mi cuadro local que no tiene ese certificado. Intentaba hacer pruebas locales, al convertir algunos de los enlaces de HTTPS a HTTP. Pensé que sería más fácil hacer esto que intentar instalar un certificado autofirmado para pruebas locales.
Resultó que estaba recibiendo este error porque no tenía SSL habilitado en mi IIS local, aunque no tenía la intención de usarlo realmente.
Había algo en la configuración para HTTPS. La creación de un certificado autofirmado en IIS7 permitió que HTTP funcionara :-)
Creo que estás intentando configurar tu servicio de forma similar a la siguiente configuración. Aquí encontrará más información: especifique un servicio con dos puntos finales utilizando diferentes valores de enlace . Además, aparte del desarrollo, probablemente no sea una buena idea tener puntos finales HTTP y HTTPS para el mismo servicio. Es un poco frustra el propósito de HTTPS. ¡Espero que esto ayude!
<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
<endpoint
address="http://computer:8080/Hello"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding"
bindingConfiguration="shortTimeout"
</endpoint>
<endpoint
address="http://computer:8080/Hello"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding"
bindingConfiguration="Secure"
</endpoint>
</service>
<bindings>
<basicHttpBinding
name="shortTimeout"
timeout="00:00:00:01"
/>
<basicHttpBinding
name="Secure">
<Security mode="Transport" />
</basicHttpBinding>
</bindings>
En mi caso estoy configurando el modo de seguridad en "TransportCredentialOnly" en lugar de "Transport" en el enlace. Cambiarlo resolvió el problema
<bindings>
<webHttpBinding>
<binding name="webHttpSecure">
<security mode="Transport">
<transport clientCredentialType="Windows" ></transport>
</security>
</binding>
</webHttpBinding>
</bindings>
Estaba usando webHttpBinding y olvidé especificar el modo de seguridad de "Transporte" en la configuración de enlace que causó el error:
<webHttpBinding>
<binding name="MyWCFServiceEndpoint">
<security mode="Transport" />
</binding>
</webHttpBinding>
Agregar esto a la configuración solucionó el problema.
Mire su dirección base y su dirección de punto final (no puede verla en su código de muestra). lo más probable es que haya omitido una columna o algún otro error ortográfico, por ejemplo, https // en lugar de https: //
Resultó que mi problema era que estaba usando un equilibrador de carga para manejar el SSL, que luego lo envió a través de http al servidor real, que luego se quejó.
La descripción de un arreglo está aquí: http://blog.hackedbrain.com/2006/09/26/how-to-ssl-passthrough-with-wcf-or-transportwithmessagecredential-over-plain-http/
Editar: arreglé mi problema, que era ligeramente diferente, después de hablar con soporte de microsoft.
Mi aplicación silverlight tenía su dirección de punto final en el código pasando por https al equilibrador de carga. El equilibrador de carga cambió la dirección del punto final a http y apuntó al servidor real al que se dirigía. Entonces en la configuración web de cada servidor agregué un listenUri para el punto final que era http en lugar de https
<endpoint address="" listenUri="http://[LOAD_BALANCER_ADDRESS]" ... />
Tenía exactamente el mismo problema. Excepto que mi solución fue agregar una "s" al valor de enlace.
Viejo: binding = "mexHttpBinding"
Nuevo: binding = "mexHttpsBinding"
fragmento de web.config:
<services>
<service behaviorConfiguration="ServiceBehavior" name="LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService">
<endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding" bindingConfiguration="webBinding"
contract="LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService" />
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
</service>