Como: Configurar serviços WCF para interoperar com clientes WSE 3.0
Os serviços do Windows Communication Foundation (WCF) são compatíveis em nível de cabo com o 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 permitir que um serviço WCF interopere 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 mensagens, uma associação personalizada deve ser criada.
Adicione um filho <customBinding> às <associações> do arquivo de configuração do serviço.
Especifique um nome para a ligação, adicionando uma <associação> ao <customBinding> e definindo o
name
atributo.Especifique um modo de autenticação e a versão das especificações WS-Security que são usadas para proteger mensagens compatíveis com o <WSE 3.0, adicionando uma segurança> filho< à associação>.
Para definir o modo de autenticação, defina o
authenticationMode
<atributo da segurança>. Um modo de autenticação é aproximadamente equivalente a uma declaração de segurança turnkey no WSE 3.0. A tabela a seguir mapeia os modos de autenticação no WCF para asserções de segurança turnkey no WSE 3.0.Modo de autenticação WCF Asserção de segurança chave na mão WSE 3.0 AnonymousForCertificate anonymousForCertificateSecurity
Kerberos kerberosSecurity
MutualCertificate mutualCertificate10Security
*MutualCertificate mutualCertificate11Security
*UserNameOverTransport usernameOverTransportSecurity
UserNameForCertificate usernameForCertificateSecurity
* Uma das principais diferenças entre as
mutualCertificate10Security
asserções de segurança turnkey emutualCertificate11Security
turnkey é a versão da especificação WS-Security que o WSE usa para proteger as mensagens SOAP. ParamutualCertificate10Security
, WS-Security 1.0 é usado, enquanto WS-Security 1.1 é usado paramutualCertificate11Security
. Para WCF, a versão da especificação WS-Security é especificada nomessageSecurityVersion
atributo da <segurança>.Para definir a versão da especificação WS-Security usada para proteger mensagens SOAP, defina o
messageSecurityVersion
<atributo da segurança.> Para interoperar com o WSE 3.0, defina omessageSecurityVersion
valor do atributo como WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10.Especifique que a versão de agosto de 2004 da especificação WS-Addressing é usada pelo WCF adicionando um textMessageEncoding> e defina o
messageVersion
para seu valor como Soap11WSAddressingAugust2004.<Nota
Quando você estiver usando SOAP 1.2, defina o
messageVersion
atributo como Soap12WSAddressingAugust2004.
Especifique que o serviço usa a associação personalizada.
Defina o
binding
<atributo do elemento endpoint> comocustomBinding
.Defina o
bindingConfiguration
<atributo do elemento endpoint> para o valor especificado noname
atributo da< associação> para a associação personalizada.
Exemplo
O exemplo de código a seguir especifica que o 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 AnonymousForCertificate autenticação.
<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>