Como: configurar serviços do WCF para interoperar com clientes WSE 3.0
Os serviços Windows Communication Foundation (WCF) são compatíveis com o nível de conexão com Web Services Enhancements 3.0 para clientes Microsoft .NET (WSE) quando os serviços WCF são configurados para usar a versão de agosto de 2004 da especificação WS-Addressing.
Para habilitar um serviço WCF para interoperar com clientes WSE 3.0
Defina uma associação personalizada para o serviço WCF.
Para especificar que a versão de agosto de 2004 da especificação WS-Addressing é usada para codificação de mensagem, uma associação customizada deve ser criada.
Adicione uma <customBinding> filha às <associações> do arquivo de configuração do serviço.
Especifique um nome para a associação, adicionando uma <associação> à <customBinding> e definindo o atributo
name
.Especifique um modo de autenticação e a versão das especificações de WS-Security que são usadas para proteger mensagens compatíveis com WSE 3.0, adicionando uma <segurança> filha à <associação>.
Para definir o modo de autenticação, defina o atributo
authenticationMode
de <segurança>. Um modo de autenticação é aproximadamente equivalente a uma declaração de segurança pronta para uso no WSE 3.0. A tabela a seguir mapeia os modos de autenticação no WCF para as declarações de segurança prontas para uso no WSE 3.0.Modo de autenticação WCF Declaração turnkey de segurança do WSE 3.0 AnonymousForCertificate anonymousForCertificateSecurity
Kerberos kerberosSecurity
MutualCertificate mutualCertificate10Security
*MutualCertificate mutualCertificate11Security
*UserNameOverTransport usernameOverTransportSecurity
UserNameForCertificate usernameForCertificateSecurity
* Uma das principais diferenças entre as declarações de segurança prontas para uso
mutualCertificate10Security
emutualCertificate11Security
é a versão da especificação WS-Security que o WSE usa para proteger as mensagens SOAP. ParamutualCertificate10Security
, o WS-Security 1.0 é usado, enquanto o WS-Security 1.1 é usado paramutualCertificate11Security
. Para WCF, a versão da especificação WS-Security é especificada no atributomessageSecurityVersion
da <segurança>.Para definir a versão da especificação WS-Security que é usada para proteger mensagens SOAP, defina o atributo
messageSecurityVersion
da <segurança>. Para interoperar com o WSE 3.0, defina o valor do atributomessageSecurityVersion
como WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10.Especifique que a versão de agosto de 2004 da especificação WS-Addressing é usada pelo WCF adicionando um <textMessageEncoding> e defina
messageVersion
para seu valor como Soap11WSAddressingAugust2004.Observação
Quando estiver usando SOAP 1.2, configure o atributo
messageVersion
como Soap12WSAddressingAugust2004.
Especifique que o serviço usa a associação customizada.
Defina o atributo
binding
do elemento <ponto de extremidade> comocustomBinding
.Defina o atributo
bindingConfiguration
do elemento <ponto de extremidade> para o valor especificado no atributoname
da <associação> para a associação.
Exemplo
O exemplo de código a seguir especifica que Service.HelloWorldService
usa uma associação personalizada para interoperar com clientes WSE 3.0. A associação personalizada especifica que a versão de agosto de 2004 do WS-Addressing e o conjunto de especificações WS-Security 1.1 são usados para codificar as mensagens trocadas. As mensagens são protegidas usando o modo de autenticação 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>