wcf wcf-binding

binding wcf



bindingConfiguration vs bindingName (4)

¿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. Configuré el web.config de esta manera:

<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, entonces https no funciona. Cuando cambio bindingConfiguration a bindingName funciona como se esperaba. Entonces, ¿cuál es exactamente la diferencia entre los dos?


De la documentación de MSDN

bindingConfiguration : una cadena que especifica el nombre de enlace del enlace a usar 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 utilizar 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 definición 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 punto final. Si algo no funciona cuando usa bindingConfiguration="basicHttps" , entonces suena como si tuviera una configuración incorrecta que le impide funcionar correctamente (si no se especifica la bindingConfiguration se bindingConfiguration los valores predeterminados, que es lo que está sucediendo cuando cambia la bindingConfiguration a bindingName ). No creo que <transport clientCredentialType="None"/> sea ​​válido, los valores posibles son Basic, Certificate, Digest, Windows o NTLM. Ver información general de seguridad en el transporte


El atributo binding= simplemente define, qué enlace (protocolo) desea: basicHttpBinding , wsHttpBinding , netTcpBinding , etc.

Todos estos enlaces tienen valores predeterminados del sistema: si no especifica ninguna configuración de enlace, se utilizarán los valores predeterminados del sistema.

Lo que ha definido en la sección <bindings> de su configuración es una configuración de enlace , un conjunto de parámetros para su enlace de elección que se utilizará en lugar de los valores predeterminados del sistema .

Por lo tanto, la binding= y la bindingConfiguration= deben coincidir: no puede definir una vinculación (por ejemplo, basicHttpBinding ) pero luego puede asignar una configuración de vinculación para una vinculación diferente.

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


El enlace de configuración de su 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 utilizado no válido en su caso, el servicio simplemente inicia un enlace básico a HTTP sin mirar su configuración personalizada, que parece funcionar correctamente.

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

Entonces, usar el atributo bindingConfiguration es lo único correcto. Ahora todavía tenemos que ver lo que está mal con su propia configuración de enlace :-) Vea 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>

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


bindingConfiguration Una cadena que especifica el nombre de enlace del enlace a usar 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 utilizar 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 definición a través de WSDL. El valor predeterminado es una cadena vacía.