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 acerca de los transportes admitidos por WCF, consulte elegir un transporte. Para obtener una lista de los escenarios admitidos por WCF, consulte escenarios comunes de seguridad. Para obtener una lista de las especificaciones que son compatibles con WCF, consulte Guía de interoperabilidad de 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.

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 más información acerca de la WCF modelo de programación, vea ciclo de vida básico de programación.

System_CAPS_ICON_note.jpg Nota

Para migrar un servicio Web de WSE a WCF la ServiceModel Metadata Utility Tool (Svcutil.exe) herramienta puede usarse 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 OperationContractAttribute atributo aplicado a los miembros del contrato con la ReplyAction propiedad establecida en *. Cuando un cliente de WSE llama a un servicio Web con este valor, se produce la excepción siguiente: 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 el ReplyAction propiedad de la OperationContractAttribute atributo nonull de valor, como http://Microsoft.WCF.Documentation/ResponseToOCAMethod.

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.0Configuración de enlace personalizado de WCF
><customBinding> <binding name="MyBinding"> <security authenticationMode="UserNameOverTransport" /> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding>
><customBinding> <binding name="MyBinding"> <security messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10" authenticationMode="MutualCertificate" /> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding>
><customBinding> <binding name="MyBinding"> <security authenticationMode="UsernameForCertificate"/> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding>
><customBinding> <binding name="MyBinding"> <security authenticationMode="AnonymousForCertificate"/> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding>
><customBinding> <binding name="MyBinding"> <security authenticationMode="Kerberos"/> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding>
><customBinding> <binding name="MyBinding"> <security authenticationMode="MutualCertificate"/> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding>

Para obtener más información acerca de cómo crear 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 información acerca de cómo especificar los requisitos de seguridad en el código, consulte Cómo: proteger un servicio Web sin utilizar un archivo de directivas. En WCF, para especificar los requisitos de seguridad en el código, cree una instancia de la BindingElementCollection de clases y agregue una instancia de un SecurityBindingElement a la BindingElementCollection. Los requisitos de aserción de seguridad se establecen mediante los métodos de aplicación auxiliar de modo de autenticación estático de la SecurityBindingElement clase. Para obtener más información acerca de cómo especificar los requisitos de seguridad en el código mediante WCF, consulte Cómo: crear una personalizada de enlace con 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. Aserciones de directiva que protegen los mensajes SOAP se derivan de WSE 3.0 SecurityPolicyAssertion clase y el equivalente conceptual en WCF es el SecurityBindingElement clase.

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 tiene definido su propia aserción de directiva personalizada para este escenario, WCF simplifica la migración. WCFdefine un modo de autenticación para este escenario, por lo que puede aprovechar el modo de autenticación estático métodos auxiliares para configurar un WCF SecurityBindingElement.

Cuando no hay un WCF modo de autenticación que es equivalente a una aserción de directiva personalizada que proteja los mensajes SOAP, derive una clase de TransportSecurityBindingElement, SymmetricSecurityBindingElement o AsymmetricSecurityBindingElement WCF clases y especifique el elemento de enlace equivalente. Para obtener más información, consulte Cómo: crear una personalizada de enlace con SecurityBindingElement.

Para convertir una aserción de directiva personalizada que no proteja un mensaje SOAP, consulte filtrado y el ejemplo Interceptor de mensajes personalizados.

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 más información acerca de cómo crear un token personalizado en WSE, consulte crear Tokens de seguridad personalizados. Para obtener más información acerca de cómo crear un token personalizado en WCF, consulte 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 más información sobre cómo crear un administrador de tokens personalizado y los demás componentes necesarios para un token de seguridad personalizado, vea Cómo: crear un Token personalizado.

System_CAPS_ICON_note.jpg Nota

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 información, consulte Cómo: usar un nombre de usuario personalizado y un validador de contraseña.

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 esta configuración, agregue el <> > en el 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>  

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 detalles sobre POX, vea interoperabilidad con aplicaciones POX. Para obtener más información acerca de la API de mensajería de WSE, consulte enviar y recibir mensajes utilizando WSE Messaging API SOAP.

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 más información acerca de este ejemplo, vea transporte: interoperabilidad de WSE 3.0 TCP.

Para especificar que un WCF aplicación usa el transporte TCP, use la <> </> > .

Transporte personalizado

El equivalente de un transporte personalizado WSE 3.0 en WCF es una extensión de canal. Para obtener más información acerca de cómo crear una extensión de canal, vea extensión de la capa de canal.

Ciclo de vida de programación básico
Enlaces personalizados
Cómo: crear un enlace personalizado mediante SecurityBindingElement
Cómo: crear un SecurityBindingElement para un modo de autenticación especificado

Mostrar: