Procedimiento para configurar los servicios WCF para interoperar con clientes de WSE 3.0
Los servicios de Windows Communication Foundation (WCF) son compatibles en el nivel de conexión con Web Services Enhancements 3.0 para los clientes de Microsoft .NET (WSE) cuando los servicios WCF están configurados para utilizar la versión de agosto de 2004 de la especificación WS-Addressing.
Para permitir a un servicio de WCF interoperar con clientes de WSE 3.0
Defina un enlace personalizado para el servicio WCF.
Para especificar que la versión de agosto de 2004 de la especificación WS-Addressing se utiliza para la codificación de mensajes, se deberá crear un enlace personalizado.
Agregue un elemento <customBinding> secundario al elemento <bindings> del archivo de configuración del servicio.
Especifique un nombre para el enlace agregando <bindings> a <customBinding> y estableciendo el atributo
name
.Especifique un modo de autenticación y la versión de la especificación WS-Security que se utiliza para proteger los mensajes que son compatibles con WSE 3.0. Para ello, agregue un elemento <security> secundario a <binding>.
Para establecer el modo de autenticación, establezca el atributo
authenticationMode
de <security>. Un modo de autenticación es aproximadamente el equivalente a una aserción de seguridad lista para ser usada en WSE 3.0. La tabla siguiente asigna los modos de autenticación de WCF a las aserciones de seguridad llave en mano de WSE 3.0.Modo de autenticación WCF Aserción de seguridad lista para ser usada de WSE 3.0 AnonymousForCertificate anonymousForCertificateSecurity
Kerberos kerberosSecurity
MutualCertificate mutualCertificate10Security
*MutualCertificate mutualCertificate11Security
*UserNameOverTransport usernameOverTransportSecurity
UserNameForCertificate usernameForCertificateSecurity
* Una de las principales diferencias entre las aserciones de seguridad llave en mano
mutualCertificate10Security
ymutualCertificate11Security
es la versión de la especificación WS-Security que WSE utiliza para proteger los mensajes SOAP. ParamutualCertificate10Security
, se utiliza WS-Security 1.0, mientras que WS-Security 1.1 se usa paramutualCertificate11Security
. Para WCF, la versión de la especificación WS-Security se especifica en el atributomessageSecurityVersion
de <security>.Para establecer la versión de la especificación WS-Security que se utiliza para proteger los mensajes SOAP, establezca el atributo
messageSecurityVersion
de <security>. Para interoperar con WSE 3.0, defina el valor del atributomessageSecurityVersion
en WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10.Especifique que WCF utiliza la versión de agosto de 2004 de la especificación WS-Addressing. Para ello, agregue <textMessageEncoding> y establezca
messageVersion
en Soap11WSAddressingAugust2004.Nota
Cuando utilice SOAP 1.2, establezca el atributo
messageVersion
en Soap12WSAddressingAugust2004.
Especifique que el servicio utiliza el enlace personalizado.
Establezca el atributo
binding
del elemento <endpoint> encustomBinding
.Establezca el atributo
bindingConfiguration
del elemento <endpoint> en el valor especificado en el atributoname
de <binding> para el enlace personalizado.
Ejemplo
El ejemplo de código siguiente especifica que Service.HelloWorldService
utiliza un enlace personalizado para interoperar con clientes de WSE 3.0. El enlace personalizado especifica que se utiliza la versión de agosto de 2004 del conjunto de especificaciones WS-Addressing y WS-Security 1.1 para codificar los mensajes intercambiados. Los mensajes se protegen utilizando el modo de autenticación AnonymousForCertificate.
<configuration>
<system.serviceModel>
<services>
<service
behaviorConfiguration="ServiceBehavior"
name="Service.HelloWorldService">
<endpoint binding="customBinding" address=""
bindingConfiguration="ServiceBinding"
contract="Service.IHelloWorld"></endpoint>
</service>
</services>
<bindings>
<customBinding>
<binding name="ServiceBinding">
<security authenticationMode="AnonymousForCertificate"
messageProtectionOrder="SignBeforeEncrypt"
messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"
requireDerivedKeys="false">
</security>
<textMessageEncoding messageVersion ="Soap11WSAddressingAugust2004"></textMessageEncoding>
<httpTransport/>
</binding>
</customBinding>
</bindings>
<behaviors>
<behavior name="ServiceBehavior" returnUnknownExceptionsAsFaults="true">
<serviceCredentials>
<serviceCertificate findValue="CN=WCFQuickstartServer" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectDistinguishedName"/>
</serviceCredentials>
</behavior>
</behaviors>
</system.serviceModel>
</configuration>