2008-12-12 13 views
41

voy al https://mywebsite/MyApp/Myservice.svc y sale el siguiente error:https con el error de WCF: "No se pudo encontrar la dirección base que coincide con https Scheme"

(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: Así que si cambio address=""-address="https:// ..." entonces me sale este error en su lugar:

"de error: El protocolo 'https' no se admite ..... El ChannelDispatcher en 'https://.../Annotation.svc' con un contrato (s) '" Anotación "'no puede abrir su IChannelListener. "

Aquí es lo que mi Web.Config se parece a:.

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

Respuesta

20

Resultó que mi problema era que yo estaba usando un equilibrador de carga para manejar el protocolo SSL, que a su vez lo envió a través de HTTP al servidor real, que luego se quejó.

Descripción de una solución está aquí: http://blog.hackedbrain.com/2006/09/26/how-to-ssl-passthrough-with-wcf-or-transportwithmessagecredential-over-plain-http/

Edición: He arreglado mi problema, que es ligeramente diferente, después de hablar con soporte técnico 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. Así que en web.config de cada servidor he añadido un listenUri para el punto final que fue http en lugar de https

<endpoint address="" listenUri="http://[LOAD_BALANCER_ADDRESS]" ... /> 
+2

El enlace -> http://blog.hackedbrain.com/archive/2006/09/26/5281.aspx no funciona. – Lamps

+1

Usar enlace-> http://blog.hackedbrain.com/2006/09/26/how-to-ssl-passthrough-with-wcf-or-transportwithmessagecredential-over-plain-http/ – meetjaydeep

3

Creo que usted está tratando de configurar su servicio de una manera similar a la siguiente configuración Hay más información aquí : Specify a Service with Two Endpoints Using Different Binding Values. Además, aparte de para el desarrollo, probablemente no sea una buena idea tener HTTP & puntos finales HTTPS para el mismo servicio. Es un poco contrario al propósito de HTTPS. Espero que este lps!

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

que parece un error tipográfico en MSDN. ¿No debería cerrarse el segundo basicHttpBinding DESPUÉS del modo de seguridad = "Transporte"? También es interesante que la dirección segura comienza con http, no con https. –

8

Asegúrese de que SSL está habilitado para su servidor!

Recibí este error al intentar 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 obteniendo 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.Crear un certificado autofirmado en IIS7 permitió que HTTP funcione :-)

+2

Descubrí que era suficiente para asegurarse de que IIS (6.0) estaba escuchando en el puerto 443 (haga clic con el botón derecho en Sitio web predeterminado, Propiedades, puerto SSL, reinicie). No llegué tan lejos como para crear un certificado. –

+1

Encontré el comentario anterior de @ rory-macleod para ser muy útil. Cuando se ejecute localmente, asegúrese de habilitar SSL haciendo clic derecho en el proyecto dentro de Visual Studio y luego estableciendo "SSL habilitado" en "verdadero" dentro del panel de Propiedades del proyecto. Luego, se le pedirá que instale el certificado autofirmado. – Jeff

+0

@Jeff ¡gracias eso fue todo! había estado tratando de hacer que esto funcione por un par de días ahora – symbiont

25

Tuve exactamente el mismo problema. Excepto que mi solución fue agregar una "s" al valor de enlace.

antigua: unión = "mexHttpBinding"

Nuevo: unión = "mexHttpsBinding"

web.config fragmento:

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

mirada a su base dirección y su dirección de punto final (no puede verlo en su código de muestra). lo más probable es que te hayas perdido una columna o algún otro error tipográfico, p. https // en lugar de https: //

0

que estaba usando webHttpBinding y se olvidó de dicate el modo de seguridad de "transporte" de la configuración de unión que provocó el error:

<webHttpBinding> 
    <binding name="MyWCFServiceEndpoint"> 
     <security mode="Transport" /> 
    </binding> 
    </webHttpBinding> 

La adición de este en configuración fija la problema.

1

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