Migrando serviços Web do WSE 3.0 para WCF
Os benefícios da migração dos serviços Web WSE 3.0 para o Windows Communication Foundation (WCF) incluem desempenho aprimorado e suporte a transportes adicionais, cenários de segurança adicionais e especificações WS-*. Um serviço Web que é migrado do WSE 3.0 para WCF pode experimentar uma melhoria de desempenho de até 200% a 400%. Para obter mais informações sobre os transportes suportados pelo WCF, consulte Escolhendo um transporte. Para obter uma lista dos cenários suportados pelo WCF, consulte Cenários comuns de segurança. Para obter uma lista das especificações suportadas pelo WCF, consulte Web Services Protocols Interoperability Guide.
As seções a seguir fornecem orientação sobre como migrar um recurso específico de um serviço Web WSE 3.0 para WCF.
Geral
Os aplicativos WSE 3.0 e WCF incluem interoperabilidade em nível de fio e um conjunto comum de terminologia. Os aplicativos WSE 3.0 e WCF são interoperáveis em nível de fio com base no conjunto de especificações WS-* que ambos suportam. Quando um aplicativo WSE 3.0 ou WCF é desenvolvido, há um conjunto comum de terminologia, como os nomes das asserções de segurança turnkey no WSE e os modos de autenticação.
Embora existam muitos aspetos semelhantes entre os modelos de programação WCF e ASP.NET ou WSE 3.0, eles são diferentes. Para obter detalhes sobre o modelo de programação WCF, consulte Basic Programming Lifecycle.
Nota
Para migrar um serviço Web WSE para WCF, a ferramenta ServiceModel Metadata Utility Tool (Svcutil.exe) pode ser usada para gerar um cliente. Esse cliente, no entanto, contém interfaces e classes que podem ser usadas como ponto de partida para um serviço WCF também. As interfaces geradas têm o OperationContractAttribute atributo aplicado aos membros do contrato com a ReplyAction propriedade definida como *
. Quando um cliente WSE chama um serviço Web com essa configuração, a seguinte exceção é lançada: Web.Services3.ResponseProcessingException: WSE910: Ocorreu um erro durante o processamento de uma mensagem de resposta e você pode encontrar o erro na exceção interna. Para atenuar isso, defina a ReplyAction OperationContractAttribute propriedade do atributo como um não-valornull
, como http://Microsoft.WCF.Documentation/ResponseToOCAMethod
.
Segurança
Serviços Web do WSE 3.0 protegidos usando um arquivo de política
Os serviços WCF podem usar um arquivo de configuração para proteger um serviço e esse mecanismo é semelhante a um arquivo de diretiva WSE 3.0. No WSE 3.0, ao proteger um serviço Web usando um arquivo de política, você usa uma declaração de segurança turnkey ou uma declaração de política personalizada. As asserções de segurança turnkey são mapeadas de perto para o modo de autenticação de um elemento de vinculação de segurança WCF. Os modos de autenticação WCF e as asserções de segurança turnkey do WSE 3.0 não só têm o mesmo nome ou similarmente, como também protegem as mensagens usando os mesmos tipos de credenciais. Por exemplo, a usernameForCertificate
asserção de segurança turnkey no WSE 3.0 mapeia para o UsernameForCertificate
modo de autenticação no WCF. Os exemplos de código a seguir demonstram como uma política mínima que usa a usernameForCertificate
asserção de segurança turnkey no WSE 3.0 mapeia para um modo de UsernameForCertificate
autenticação no WCF em uma associação personalizada.
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 as configurações de segurança de um serviço Web WSE 3.0 especificadas em um arquivo de diretiva para WCF, uma associação personalizada deve ser criada em um arquivo de configuração e a declaração de segurança turnkey deve ser definida como seu modo de autenticação equivalente. Além disso, a associação personalizada deve ser configurada para usar a especificação WS-Addressing de agosto de 2004 quando os clientes WSE 3.0 se comunicam com o serviço. Quando o serviço WCF migrado não requer comunicação com clientes WSE 3.0 e deve manter apenas a paridade de segurança, considere usar as ligações definidas pelo sistema WCF com configurações de segurança apropriadas em vez de criar uma associação personalizada.
A tabela a seguir lista o mapeamento entre um arquivo de diretiva WSE 3.0 e a associação personalizada equivalente no WCF.
Asserção de segurança chave na mão WSE 3.0 | Configuração de vinculação personalizada do WCF |
---|---|
<nome de usuárioOverTransportSecurity /> | <customBinding> <binding name="MyBinding"> <security authenticationMode="UserNameOverTransport" /> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding> |
<mutualCertificate10Segurança /> | <customBinding> <binding name="MyBinding"> <security messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10" authenticationMode="MutualCertificate" /> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding> |
<nome de usuárioForCertificateSecurity /> | <customBinding> <binding name="MyBinding"> <security authenticationMode="UsernameForCertificate"/> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding> |
<anônimoForCertificateSecurity /> | <customBinding> <binding name="MyBinding"> <security authenticationMode="AnonymousForCertificate"/> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding> |
<kerberosSegurança /> | <customBinding> <binding name="MyBinding"> <security authenticationMode="Kerberos"/> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding> |
<mutualCertificate11Segurança /> | <customBinding> <binding name="MyBinding"> <security authenticationMode="MutualCertificate"/> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding> |
Para obter mais informações sobre como criar associações personalizadas no WCF, consulte Ligações personalizadas.
Serviços Web WSE 3.0 protegidos usando o código do aplicativo
Se WSE 3.0 ou WCF é usado, os requisitos de segurança podem ser especificados no código do aplicativo em vez de na configuração. No WSE 3.0, isso é feito criando uma classe que deriva da Policy
classe e, em seguida, adicionando os requisitos chamando o Add
método. Para obter mais detalhes sobre como especificar os requisitos de segurança no código, consulte Como proteger um serviço Web sem usar um arquivo de política. No WCF, para especificar requisitos de segurança no código, crie uma instância da BindingElementCollection classe e adicione uma instância de a SecurityBindingElement ao BindingElementCollection. Os requisitos de asserção de segurança são definidos usando os métodos auxiliares do modo de autenticação estática da SecurityBindingElement classe. Para obter mais detalhes sobre como especificar requisitos de segurança no código usando WCF, consulte Como criar uma associação personalizada usando o SecurityBindingElement e Como criar um SecurityBindingElement para um modo de autenticação especificado.
Declaração de política personalizada do WSE 3.0
No WSE 3.0 há dois tipos de asserções de política personalizadas: aquelas que protegem uma mensagem SOAP e aquelas que não protegem uma mensagem SOAP. Asserções de política que mensagens SOAP seguras derivam da classe WSE 3.0 SecurityPolicyAssertion
e o equivalente conceitual no WCF é a SecurityBindingElement classe.
Um ponto importante a ser observado é que as asserções de segurança turnkey do WSE 3.0 são um subconjunto dos modos de autenticação WCF. Se você criou uma declaração de política personalizada no WSE 3.0, pode haver um modo de autenticação WCF equivalente. Por exemplo, o WSE 3.0 não fornece uma asserção de segurança CertificateOverTransport equivalente à UsernameOverTransport
afirmação de segurança turnkey, mas usa um certificado X.509 para fins de autenticação de cliente. Se você definiu sua própria declaração de política personalizada para esse cenário, o WCF torna a migração simples. O WCF define um modo de autenticação para esse cenário, para que você possa aproveitar os métodos auxiliares do modo de autenticação estática para configurar um WCFSecurityBindingElement.
Quando não houver um modo de autenticação WCF que seja equivalente a uma declaração de política personalizada que protege mensagens SOAP, derive uma classe de , SymmetricSecurityBindingElement ou AsymmetricSecurityBindingElementclasses WCF e especifique o elemento de TransportSecurityBindingElementvinculação equivalente. Para obter mais detalhes, consulte Como criar uma associação personalizada usando o SecurityBindingElement.
Para converter uma asserção de política personalizada que não protege uma mensagem SOAP, consulte Filtragem e o exemplo Custom Message Intercetor.
Token de segurança personalizado WSE 3.0
O modelo de programação WCF para criar um token personalizado é diferente do WSE 3.0. Para obter detalhes sobre como criar um token personalizado no WSE, consulte Criando tokens de segurança personalizados. Para obter detalhes sobre como criar um token personalizado no WCF, consulte Como criar um token personalizado.
Gerenciador de Token Personalizado WSE 3.0
O modelo de programação para criar um gerenciador de token personalizado é diferente no WCF do WSE 3.0. Para obter detalhes sobre como criar um gerenciador de token personalizado e os outros componentes necessários para um token de segurança personalizado, consulte Como criar um token personalizado.
Nota
Se você criou um gerenciador de token de segurança personalizado UsernameToken
, o WCF fornece um mecanismo mais fácil para especificar a lógica de autenticação do que criar um gerenciador de token de segurança personalizado. Para obter mais detalhes, consulte Como usar um validador de nome de usuário e senha personalizado.
Serviços Web WSE 3.0 que usam mensagens SOAP codificadas MTOM
Como um aplicativo WSE 3, um aplicativo WCF pode especificar a codificação de mensagem MTOM na configuração. Para migrar essa configuração, adicione o <mtomMessageEncoding> à associação para o serviço. O exemplo de código a seguir demonstra como a codificação MTOM é especificada no WSE 3.0 para um serviço que é equivalente no WCF.
WSE 3,0
<messaging>
<mtom clientMode="On"/>
</messaging>
WCF
<customBinding>
<binding name="MyBinding">
<mtomMessageEncoding/>
</binding>
</customBinding>
Mensagens
Aplicativos WSE 3.0 que usam a API de mensagens WSE
Quando a API de mensagens WSE é usada para obter acesso direto ao XML que é comunicado entre o cliente e o serviço Web, o aplicativo pode ser convertido para usar "Plain Old XML" (POX). Para obter mais detalhes sobre POX, consulte Interoperabilidade com aplicativos POX. Para obter mais detalhes sobre a API de mensagens WSE, consulte Enviando e recebendo mensagens SOAP usando a API de mensagens WSE.
Transportes
TCP
Por padrão, clientes WSE 3.0 e serviços Web que enviam mensagens SOAP usando o transporte TCP não interoperam com clientes WCF e serviços Web. Esta incompatibilidade deve-se a diferenças no enquadramento utilizado no protocolo TCP e por razões de desempenho. No entanto, um exemplo de WCF detalha como implementar uma sessão TCP personalizada que interopera com o WSE 3.0. Para obter detalhes sobre este exemplo, consulte Transporte: interoperabilidade TCP do WSE 3.0.
Para especificar que um aplicativo WCF usa o transporte TCP, use o netTcpBinding>.<
Transporte Personalizado
O equivalente a um transporte personalizado WSE 3.0 no WCF é uma extensão de canal. Para obter detalhes sobre como criar uma extensão de canal, consulte Estendendo a camada de canal.