Compartilhar via


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

  1. 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.

    1. Adicione uma <customBinding> filha às <associações> do arquivo de configuração do serviço.

    2. Especifique um nome para a associação, adicionando uma <associação> à <customBinding> e definindo o atributo name.

    3. 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 e mutualCertificate11Security é a versão da especificação WS-Security que o WSE usa para proteger as mensagens SOAP. Para mutualCertificate10Security, o WS-Security 1.0 é usado, enquanto o WS-Security 1.1 é usado para mutualCertificate11Security. Para WCF, a versão da especificação WS-Security é especificada no atributo messageSecurityVersion 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 atributo messageSecurityVersion como WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10.

    4. 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.

  2. Especifique que o serviço usa a associação customizada.

    1. Defina o atributo binding do elemento <ponto de extremidade> como customBinding.

    2. Defina o atributo bindingConfiguration do elemento <ponto de extremidade> para o valor especificado no atributo name 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>

Confira também