Compartir a través de


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

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

    1. Agregue un elemento <customBinding> secundario al elemento <bindings> del archivo de configuración del servicio.

    2. Especifique un nombre para el enlace agregando <bindings> a <customBinding> y estableciendo el atributo name.

    3. 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 y mutualCertificate11Security es la versión de la especificación WS-Security que WSE utiliza para proteger los mensajes SOAP. Para mutualCertificate10Security, se utiliza WS-Security 1.0, mientras que WS-Security 1.1 se usa para mutualCertificate11Security. Para WCF, la versión de la especificación WS-Security se especifica en el atributo messageSecurityVersion 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 atributo messageSecurityVersion en WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10.

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

  2. Especifique que el servicio utiliza el enlace personalizado.

    1. Establezca el atributo binding del elemento <endpoint> en customBinding.

    2. Establezca el atributo bindingConfiguration del elemento <endpoint> en el valor especificado en el atributo name 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>

Consulte también