2011-09-20 12 views
20

¿Cuál es exactamente la diferencia entre los elementos bindingConfiguration y bindingName en un elemento de punto final WCF? La razón por la que pregunto es que estoy creando un punto final que usa basicHttpBinding y SSL. He configurado el web.config como esto:bindingConfiguration vs bindingName

<basicHttpBinding> 
<binding name="basicHttps"> 
    <security mode="Transport"> 
    <transport clientCredentialType="None"/> 
    </security> 
</binding> 

<endpoint binding="basicHttpBinding" bindingConfiguration="basicHttps" contract="Hsp.Services.Interface.Catalog.ICatalogService" address="" /> 

Sin embargo, cuando se utiliza bindingConfiguration continuación https no está funcionando. Cuando cambio bindingConfiguration a bindingName funciona como se esperaba. Entonces, ¿cuál es exactamente la diferencia entre los dos?

Respuesta

22

El atributo define binding= simplemente, que la unión (protocolo) que desee - basicHttpBinding, wsHttpBinding, etc. netTcpBinding

Esas fijaciones todos tienen valores por defecto del sistema - si no se especifica ninguna configuración de enlace, los valores predeterminados del sistema se utilizará.

Lo que se ha definido en su sección <bindings> de su configuración es una configuración vinculante - un conjunto de parámetros para su unión de elección que será utilizado en lugar de los valores predeterminados del sistema.

Así que la binding= y la necesidad bindingConfiguration= para que coincida - No se puede definir una unión (por ejemplo basicHttpBinding), pero a continuación, asignar una configuración de unión para una unión diferente.

Sin embargo, eso no explica por qué su https no funciona; ese debe ser otro problema. ¿Puedes elaborar un poco más? ¿Cómo funciona no funciona? Simplemente no hay respuesta, o se obtiene un error (si es así: ¿cuál es ese error?)

7

Su enlace de configuración de servicio es incorrecto. Entonces, cuando se refiere correctamente a su configuración de enlace utilizando el atributo bindingConfiguration, su servicio no está funcionando. Cuando utiliza el atributo bindingName, que es un atributo usado no válido en su caso, el servicio simplemente inicia un BasicHttpBinding sin mirar su configuración personalizada, que parece funcionar correctamente.

Para la diferencia entre los dos elementos mira: http://msdn.microsoft.com/en-us/library/ms731320.aspx.

Por lo tanto, usar el atributo bindingConfiguration es lo único correcto. Ahora todavía tenemos que ver qué hay de malo con la configuración de enlace en sí :-) Consulte el siguiente ejemplo para extraer su información relevante.

<system.web.extensions> 
    <scripting> 
    <webServices> 
     <authenticationService enabled="true" 
     requireSSL = "true"/> 
    </webServices> 
    </scripting> 
</system.web.extensions> 
<system.serviceModel> 
    <services> 
    <service name="System.Web.ApplicationServices.AuthenticationService" 
     behaviorConfiguration="AuthenticationServiceTypeBehaviors"> 
     <endpoint contract= 
     "System.Web.ApplicationServices.AuthenticationService" 
     binding="basicHttpBinding" 
     bindingConfiguration="userHttps" 
     bindingNamespace="http://asp.net/ApplicationServices/v200"/> 
     </service> 
    </services> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="userHttps"> 
       <security mode="Transport" /> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior name="AuthenticationServiceTypeBehaviors"> 
     <serviceMetadata httpGetEnabled="true"/> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment 
    aspNetCompatibilityEnabled="true"/> 
</system.serviceModel> 

Ver http://msdn.microsoft.com/en-us/library/bb398990.aspx para más detalles.

8

De the MSDN documentation

bindingConfiguration: Una cadena que especifica el nombre de la unión de la unión a utilizar cuando se crea una instancia del punto final. El nombre de enlace debe estar dentro del alcance en el punto en que se define el punto final. El valor predeterminado es una cadena vacía. Este atributo se usa junto con el enlace para hacer referencia a una configuración de enlace específica en el archivo de configuración. Establezca este atributo si está intentando usar un enlace personalizado.De lo contrario, se puede lanzar una excepción.

bindingName: Una cadena que especifica el nombre calificado exclusivo del enlace para la exportación de definiciones a través de WSDL. El valor predeterminado es una cadena vacía.

Nunca he usado bindingName, pero parece que solo afecta al WSDL generado para su endpoint. Si algo no funciona cuando usa bindingConfiguration="basicHttps", entonces parece que tiene una configuración incorrecta que impide que funcione correctamente (si no se especifica bindingConfiguration, se aplicarán los valores predeterminados, que es lo que sucede cuando se cambia bindingConfiguration a bindingName). No creo que <transport clientCredentialType="None"/> sea válido, los valores posibles son Basic, Certificate, Digest, Windows o NTLM. Ver Transport Security Overview

+0

"el valor predeterminado es una cadena vacía" - Cambié mi valor predeterminado a una cadena vacía y todo funcionó :-) – GlennG

0

bindingConfiguration Una cadena que especifica el nombre de la unión de la unión a utilizar cuando se crea una instancia del punto final. El nombre de enlace debe estar dentro del alcance en el punto en que se define el punto final. El valor predeterminado es una cadena vacía.

Este atributo se utiliza junto con el enlace para hacer referencia a una configuración de enlace específica en el archivo de configuración. Establezca este atributo si está intentando usar un enlace personalizado. De lo contrario, se puede lanzar una excepción.

bindingName Cadena que especifica el nombre calificado único del enlace para exportar definiciones a través de WSDL. El valor predeterminado es una cadena vacía.

Cuestiones relacionadas