Partager via


Procédure : configurer les services WCF pour interagir avec des clients WSE 3.0

Les services Windows Communication Foundation (WCF) sont compatibles pour la communication avec les clients Web Services Enhancements 3.0 (WSE) pour Microsoft .NET lorsque les services WCF sont configurés afin d’utiliser la version d’août 2004 de la spécification WS-Addressing.

Pour permettre à un service WCF d'interagir avec les clients WSE 3.0

  1. Définissez une liaison personnalisée pour le service WCF.

    Pour indiquer que la version d'août 2004 de la spécification WS-Addressing est utilisée pour l'encodage des messages, il est nécessaire de créer une liaison personnalisée.

    1. Ajoutez un <customBinding> enfant à l’élément <bindings> du fichier de configuration du service.

    2. Spécifiez un nom pour la liaison, en ajoutant un élément <binding> à l’élément <customBinding> et en définissant l’attribut name.

    3. Spécifiez un mode d'authentification ainsi que la version des spécifications WS-Security utilisées pour sécuriser les messages compatibles avec WSE 3.0, en ajoutant un élément <security> enfant à l’élément <binding>.

      Pour définir le mode d'authentification, définissez l'attribut authenticationMode de <security>. Un mode d'authentification équivaut approximativement à une assertion de sécurité clés en main dans WSE 3.0. Le tableau suivant mappe les modes d'authentification dans WCF aux assertions de sécurité clé en main dans WSE 3.0.

      Mode d'authentification WCF Assertion de sécurité clé en main de WSE 3.0
      AnonymousForCertificate anonymousForCertificateSecurity
      Kerberos kerberosSecurity
      MutualCertificate mutualCertificate10Security*
      MutualCertificate mutualCertificate11Security*
      UserNameOverTransport usernameOverTransportSecurity
      UserNameForCertificate usernameForCertificateSecurity

      * L'une des principales différences entre les assertions de sécurité clé en main mutualCertificate10Security et mutualCertificate11Security concerne la version de la spécification WS-Security qui est utilisée par WSE pour sécuriser les messages SOAP. Pour mutualCertificate10Security, la version 1.0 de WS-Security est utilisée tandis que c'est la version 1.1 de WS-Security qui est utilisée pour mutualCertificate11Security. Pour WCF, la version de la spécification WS-Security utilisée est spécifiée dans l'attribut messageSecurityVersion de <security>.

      Pour définir la version de la spécification WS-Security utilisée pour sécuriser des messages SOAP, définissez l'attribut messageSecurityVersion de <security>. Pour permettre l'interaction avec WSE 3.0, affectez messageSecurityVersion à la valeur de l'attribut WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10.

    4. Spécifiez que la version d'août 2004 de la spécification WS-Addressing est utilisée par WCF en ajoutant un <textMessageEncoding> et en définissant messageVersion à sa valeur, Soap11WSAddressingAugust2004.

      Notes

      Lorsque vous utilisez SOAP 1.2, affectez à l'attribut messageVersion la valeur Soap12WSAddressingAugust2004.

  2. Spécifiez que le service utilise la liaison personnalisée.

    1. Définissez l'attribut binding de l'élément <endpoint> à la valeur customBinding.

    2. Définissez l'attribut bindingConfiguration de l'élément <endpoint> à la valeur qui est spécifiée dans l'attribut name de l’élément <binding> pour la liaison personnalisée.

Exemple

Dans l’exemple de code suivant, Service.HelloWorldService utilise une liaison personnalisée pour interagir avec les clients WSE 3.0. La liaison personnalisée spécifie que la version d'août 2004 de la spécification WS-Addressing et que la version 1.1 de WS-Security sont utilisées pour encoder les messages échangés. Les messages sont sécurisés à l'aide du mode d'authentification 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>

Voir aussi