2011-01-10 30 views
13

He creado y probado el servicio WCF, todo funciona bien.WCF service under https environment

Cuando desplegados en Entorno de prueba y trató de abrir https://my.site/myapp/EnrollmentService.svc Tengo el mensaje de error:

No se pudo encontrar una dirección base que partidos esquema HTTP para el punto final con la unión MetadataExchangeHttpBinding. Los esquemas de dirección base registrados son [https].

Internet me mostró que tengo que añadir algunos más opciones de configuración:

http://www.codeproject.com/KB/WCF/7stepsWCF.aspx

He añadido algunos ajustes para dar servicio a archivo web.config. Ahora parece que la siguiente manera:

<system.serviceModel> 
<services> 
    <service name="McActivationApp.EnrollmentService" behaviorConfiguration="McActivationApp.EnrollmentServicBehavior"> 
    <endpoint 
     address="https://my.site/myapp/EnrollmentService.svc" 
     binding="basicHttpBinding" 
     bindingConfiguration="TransportSecurity" 
     contract="McActivationApp.IEnrollmentService"/> 
    <endpoint address="mex" binding="mexHttpBinding" contract="McActivationApp.IEnrollmentService" /> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="McActivationApp.EnrollmentServicBehavior"> 
     <serviceMetadata httpGetEnabled="True"/> 
     <serviceDebug includeExceptionDetailInFaults="False" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<bindings> 
    <basicHttpBinding> 
    <binding name="TransportSecurity"> 
     <security mode="Transport"> 
     <transport clientCredentialType="None" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 

En realidad, he añadido la sección "Enlaces" y especifica que para mi punto final.

Pero esto cambió nada ...

favor avise, lo que tengo que hacer. ¡Muchas gracias!

P.S. ¿Hay alguna diferencia en el consumo de servicios WCF de los recursos https y http?

Respuesta

19

Cuando quiere exponer su servicio solo a través de HTTPS (el sitio no admite HTTP en absoluto) no puede usar nada que dependa de HTTP. Su configuración actual expone la página de ayuda en HTTP y también mex endpoing (con contrato incorrecto) en HTTP. Así que intente esto:

<system.serviceModel> 
    <services> 
    <service name="McActivationApp.EnrollmentService" behaviorConfiguration="McActivationApp.EnrollmentServicBehavior">  
     <endpoint address="" binding="basicHttpBinding" bindingConfiguration="TransportSecurity" contract="McActivationApp.IEnrollmentService"/>  
     <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> 
    </service> 
    </services> 
    <behaviors> 
    <serviceBehaviors>  
     <behavior name="McActivationApp.EnrollmentServicBehavior">   
     <serviceMetadata httpsGetEnabled="True"/>  
     <serviceDebug includeExceptionDetailInFaults="False" />  
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
    <bindings> 
    <basicHttpBinding>  
     <binding name="TransportSecurity">  
     <security mode="Transport">   
      <transport clientCredentialType="None" />  
     </security>  
     </binding> 
    </basicHttpBinding> 
    </bindings> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />  
</system.serviceModel> 
+1

¿Entiendo correctamente que aquí usted: 1) cambió la vinculación mex de mexHttpBinding a mexHttpsBinding y 2) reemplazó httpGetEnabled con httpsGetEnabled. ¿Verdad? Sí, también funciona. Gracias – Budda

+1

Sí, eso es lo que hice + modifiqué el contrato para Mex y quité la dirección del primer punto final porque no se usa cuando el servicio está alojado en IIS. –

+0

¡Gracias por tu ayuda! – Budda

1

Para solucionar el problema permitiendo HTTP, es necesario agregar un enlace en IIS http:

  1. Vaya a su sitio en IIS
  2. Haga clic en 'Enlaces ...' en el panel Acciones, en el derecho.
  3. Haga clic en 'Agregar'
  4. Seleccione 'http' y salga.

Alternativamente, puede evitar el problema de borrar la línea, o cambiar:

<serviceMetadata httpGetEnabled="True"/> 

a:

<serviceMetadata httpsGetEnabled="True"/> 
+0

¡Excelente! ¡Muchas gracias! – Budda

+0

... pero ... después de ese cambio, el sitio web comenzó a funcionar bajo el habitual 'http' que no está permitido ... – Budda

5

Tienes http metadatos de punto final que debe ser cambiado a https como a continuación.

<serviceMetadata httpsGetEnabled="True"/> 

Además, si no es necesario, debe eliminar los metadatos mex y https de la producción como una buena práctica.

+1

¿Entiendo correctamente que necesito agregar eso en '?' Así que ¿puedo eliminar el enlace para http para ese caso? Si agrego este atributo y elimino el enlace 'serviceMetadata', ya recibo el mismo mensaje de error .. Aconseje – Budda

+0

Lo que también necesitaba cambiar es eliminar (atención: el nombre del atributo no contiene la 's') y eliminar el punto final 'mex' ... – Budda

+0

Esto es lo que quise decir, cambie de httpGetEnabled a httpsGetEnabled. – softveda