Migración de los servicios web WSE 3.0 a WCF

Entre las ventajas de migrar los servicios web WSE 3.0 a Windows Communication Foundation (WCF) se incluyen un mejor rendimiento y la compatibilidad con transportes adicionales, escenarios de seguridad adicionales y especificaciones WS - *. Un servicio web que se migra desde WSE 3.0 a WCF puede experimentar una mejora de rendimiento de entre un 200% y un 400%. Para obtener más información sobre los transportes admitidos por WCF, consulte Elección del transporte. Para obtener una lista de los escenarios admitidos por WCF, vea Escenarios de seguridad comunes. Para obtener una lista de las especificaciones admitidas por WCF, vea Guía de interoperabilidad de los protocolos de servicios web.

Las siguientes secciones proporcionan una guía sobre cómo migrar una característica específica de un servicio web WSE 3.0 a WCF.

General

WSE 3.0 y las aplicaciones de WCF incluyen interoperabilidad de nivel de conexión y un conjunto común de terminología. WSE 3.0 y las aplicaciones de WCF son interoperables en cuanto a la conexión se refiere, en función del conjunto de especificaciones WS - * que ambos admitan. Cuando un WSE 3.0 o una aplicación de WCF es desarrollada, hay un conjunto común de terminología, como los nombres de las aserciones de seguridad inmediata en WSE y los modos de autenticación.

Aunque hay muchos aspectos similares entre WCF y ASP.NET o los modelos de programación de WSE 3.0, son diferentes. Para obtener detalles sobre el modelo de programación de WCF, vea Ciclo de vida de programación básica.

ms732008.note(es-es,VS.100).gifNota:
Para migrar un servicio web WSE a WCF, se puede usar la herramienta Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) para generar un cliente. No obstante, ese cliente contiene interfaces y clases que también pueden usarse como punto inicial para un servicio WCF. Las interfaces que se generan tienen el atributo OperationContractAttribute aplicado a los miembros del contrato con la propiedad ReplyAction establecida en * Cuando un cliente de WSE llama a un servicio web con este valor, se produce la siguiente excepción : Web.Services3.ResponseProcessingException: WSE910: Se produjo un error durante el procesamiento de un mensaje de respuesta, y puede encontrar el error en la excepción interna. Para mitigar esto, establezca la propiedad ReplyAction del atributo OperationContractAttribute en un valor que no sea null, como http://Microsoft.WCF.Documentation/ResponseToOCAMethod.

Seguridad

Los servicios web WSE 3.0 que se protegen mediante un archivo de directivas

Los servicios de WCF pueden utilizar un archivo de configuración para proteger un servicio y ese mecanismo es similar a un archivo de directivas de WSE 3.0. En WSE 3.0, al proteger un servicio web mediante un archivo de directivas, utiliza una aserción de seguridad inmediata o una aserción de directiva personalizada. Las aserciones de seguridad inmediata se asignan estrechamente al modo de autenticación de un elemento de enlace de seguridad de WCF. No solo son los modos de autenticación de WCF y las aserciones de seguridad inmediata denominados igual o de forma similar, sino que protegen los mensajes utilizando los mismos tipos de credenciales. Por ejemplo, la aserción de seguridad inmediata usernameForCertificate en WSE 3.0 se asigna al modo de autenticación UsernameForCertificate en WCF. Los siguientes ejemplos de código muestran cómo una directiva mínima que utiliza la aserción de seguridad inmediata usernameForCertificate en WSE 3.0 se asigna a un modo de autenticación UsernameForCertificate en un enlace personalizado de WCF.

WSE 3.0

<policies>
  <policy name="MyPolicy">
    <usernameForCertificate messageProtectionOrder="SignBeforeEncrypt"
                            requireDeriveKeys="true"/>
  </policy>
</policies>

WCF

<customBinding>
  <binding name="MyBinding">
    <security authenticationMode="UserNameForCertificate" 
              messageProtectionOrder="SignBeforeEncrypt"
              requireDerivedKeys="true"/>
  </binding>
</customBinding>

Para migrar la configuración de seguridad de un servicio web WSE 3.0 que se especifica en un archivo de directiva para WCF, un enlace personalizado debe crearse en un archivo de configuración y la aserción de seguridad inmediata debe establecerse en su modo de autenticación equivalente. Además, el enlace personalizado debe configurarse para que utilice la especificación WS-Addressing de agosto de 2004 cuando los clientes WSE 3.0 se comunican con el servicio. Cuando el servicio de WCF migrado no requiere la comunicación con clientes WSE 3.0 y solo debe mantener la paridad de seguridad, considere usar los enlaces definidos por el sistema de WCF con la configuración de seguridad adecuada en lugar de crear un enlace personalizado.

La siguiente tabla enumera la asignación entre un archivo de directivas WSE 3.0 y el enlace personalizado equivalente en WCF.

Aserción de seguridad inmediata de WSE 3.0 Configuración de enlace personalizado de WCF

<usernameOverTransportSecurity />

<customBinding>
  <binding name="MyBinding">
    <security authenticationMode="UserNameOverTransport" />
    <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" />
  </binding>
</customBinding>

<mutualCertificate10Security />

<customBinding>
  <binding name="MyBinding">
    <security messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10" authenticationMode="MutualCertificate" />
    <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" />
  </binding>
</customBinding>

<usernameForCertificateSecurity />

<customBinding>
  <binding name="MyBinding">
    <security authenticationMode="UsernameForCertificate"/>
    <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" />
  </binding>
</customBinding>

<anonymousForCertificateSecurity />

<customBinding>
  <binding name="MyBinding">
    <security authenticationMode="AnonymousForCertificate"/>
    <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" />
  </binding>
</customBinding>

<kerberosSecurity />

<customBinding>
  <binding name="MyBinding">
    <security authenticationMode="Kerberos"/>
    <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" />
  </binding>
</customBinding>

<mutualCertificate11Security />

<customBinding>
  <binding name="MyBinding">
    <security authenticationMode="MutualCertificate"/>
    <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" />
  </binding>
</customBinding>

Para obtener más información sobre la creación de enlaces personalizados en WCF, vea Enlaces personalizados.

Servicios web WSE 3.0 que se protegen mediante código de aplicaciones

Si se usa WSE 3.0 o WCF, los requisitos de seguridad se pueden especificar mediante código de aplicación en lugar de mediante configuración. En WSE 3.0, esto se logra creando una clase que derive de la clase Policy y, a continuación, agregando los requisitos llamando al método Add. Para obtener más detalles sobre cómo especificar los requisitos de seguridad mediante código, vea Cómo proteger un servicio web sin utilizar un archivo de directivas. En WCF, para especificar los requisitos de seguridad mediante código, cree una instancia de la clase BindingElementCollection y agregue una instancia de SecurityBindingElement a BindingElementCollection. Los requisitos de aserción de seguridad se establecen mediante los métodos de ayuda del modo de autenticación estático de la clase SecurityBindingElement. Para obtener más detalles sobre cómo especificar los requisitos de seguridad mediante código utilizando WCF, vea Cómo: Crear un enlace personalizado mediante SecurityBindingElement y Cómo: Crear un SecurityBindingElement para un modo de autenticación especificado.

Aserción de directivas personalizadas WSE 3.0

En WSE 3.0 hay dos tipos de aserciones de directivas personalizadas: las que protegen un mensaje SOAP y las que no protegen un mensaje SOAP. Las aserciones de directivas que protegen los mensajes SOAP se derivan de la clase SecurityPolicyAssertion de WSE 3.0 y el equivalente conceptual en WCF es la clase SecurityBindingElement.

Un punto importante a tener en cuenta es que las aserciones de seguridad inmediata de WSE 3.0 son un subconjunto de los modos de autenticación WCF. Si ha creado una aserción de directiva personalizada en WSE 3.0, puede que haya un modo de autenticación de WCF equivalente. Por ejemplo, WSE 3.0 no proporciona ninguna aserción de seguridad de CertificateOverTransport que sea el equivalente a la aserción de seguridad inmediata UsernameOverTransport, pero utiliza un certificado X.509 para la autenticación del cliente. Si ha definido su propia aserción de directiva personalizada para este escenario, WCF simplifica la migración. WCF define un modo de autenticación para este escenario, por lo que se puede aprovecharse de los métodos de ayuda del modo de autenticación estáticos para configurar WCFSecurityBindingElement.

Cuando no hay ningún modo de autenticación de WCF que sea equivalente a una aserción de directiva personalizada que proteja los mensajes SOAP, derive una clase desde las clases TransportSecurityBindingElement, SymmetricSecurityBindingElement o AsymmetricSecurityBindingElementWCF y especifique el elemento de enlace equivalente. Para obtener más información, vea Cómo: Crear un enlace personalizado mediante SecurityBindingElement.

Para convertir una aserción de directiva personalizada que no protege un mensaje SOAP, vea Filtrado y el Interceptador de mensajes personalizadosde ejemplo.

Token de seguridad personalizado de WSE 3.0

El modelo de programación de WCF para la creación de un token personalizado es diferente del de WSE 3.0. Para obtener información detallada acerca de la creación de un token personalizado en WSE, vea Crear tokens de seguridad personalizados. Para obtener detalles sobre la creación de un token personalizado en WCF, vea Cómo: Crear un token personalizado.

Administrador de tokens personalizados de WSE 3.0

El modelo de programación para la creación de un administrador de tokens personalizado es distinto en WCF y en WSE 3.0. Para obtener información detallada sobre cómo crear un administrador de tokens personalizado y otros componentes necesarios para un token de seguridad personalizado, vea Cómo: Crear un token personalizado.

ms732008.note(es-es,VS.100).gifNota:
Si ha creado un administrador de tokens de seguridad UsernameToken personalizado, WCF proporciona un mecanismo para especificar la lógica de autenticación más fácil que crear un administrador de tokens de seguridad personalizado. Para obtener más detalles, vea Cómo utilizar un nombre de usuario personalizado y un validador de contraseñas.

Servicio web de WSE 3.0 que usan mensajes SOAP codificados mediante MTOM

Al igual que una aplicación WSE 3, una aplicación de WCF puede especificar la codificación de mensajes MTOM mediante configuración. Para migrar este valor, agregue mtomMessageEncoding element al enlace para el servicio. El ejemplo de código siguiente muestra cómo la codificación de MTOM se especifica en WSE 3.0 para un servicio que es equivalente en WCF.

WSE 3.0

<messaging>
    <mtom clientMode="On"/>
</messaging>

WCF

<customBinding>
  <binding name="MyBinding">
    <mtomMessageEncoding/>
  </binding>
</customBinding>

Mensajería

Aplicaciones WSE 3.0 que utilizan la API de mensajería WSE

Cuando la API de mensajería WSE se utiliza para obtener acceso directo al XML que se comunica entre el cliente y el servicio web, la aplicación puede convertirse para utilizar XML simple convencional (POX). Para obtener más información sobre POX, vea Interoperabilidad con aplicaciones POX. Para obtener más detalles sobre la API de mensajería de WSE, vea Sending and Receiving SOAP Messages Using WSE Messaging API.

Transportes

TCP

De forma predeterminada, los clientes y servicios web WSE 3.0 que envían mensajes SOAP mediante transporte TCP no interoperan con clientes y servicios web de WCF. Esta incompatibilidad se debe a diferencias en el marco utilizado en el protocolo TCP y por cuestiones de rendimiento. No obstante, hay un ejemplo de WCF donde se ve al detalle cómo implementar una sesión TCP personalizada que interopera con WSE 3.0. Para obtener información acerca de este ejemplo, vea Transport: WSE 3.0 TCP Interoperability.

Para especificar que una aplicación de WCF utilice el transporte TCP, utilice el netTcpBinding Element.

Transporte personalizado

El equivalente de un transporte personalizado WSE 3.0 en WCF es una extensión de canal. Para obtener detalles sobre la creación de una extensión de canal, vea Extensión de la capa de canales.

Vea también

Tareas

Cómo: Crear un SecurityBindingElement para un modo de autenticación especificado

Conceptos

Ciclo de vida de programación básica
Enlaces personalizados
Cómo: Crear un enlace personalizado mediante SecurityBindingElement