Comment : configurer les services WCF pour interagir avec les clients WSE 3.0
Les services Windows Communication Foundation (WCF) sont compatibles au niveau câble avec les services Web Services Enhancements 3.0 for Microsoft .NET (WSE) lorsque les services WCF sont configurés pour 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
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.
Ajoutez un customBinding Element enfant au <Bindings> du fichier de configuration du service.
Spécifiez un nom pour la liaison en ajoutant un binding element au customBinding Element et en définissant l'attribut name.
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 Security element enfant au binding element.
Pour définir le mode d'authentification, définissez l'attribut authenicationMode du Security element. Un mode d'authentification équivaut approximativement à une assertion de sécurité clés en main dans WSE 3.0. Le tableau suivant mappe des modes d'authentification dans WCF aux assertions de sécurité clés en main dans WSE 3.0.
Mode d'authentification WCF Assertion de sécurité clé en main de WSE 3.0 anonymousForCertificateSecurity
kerberosSecurity
mutualCertificate10Security*
MutualCertificate
mutualCertificate11Security*
usernameOverTransportSecurity
usernameForCertificateSecurity
* L'une des principales différences entre les assertions de sécurité clé en main mutualCertificate10Security et mutualCertificate11Security réside dans la version de la spécification WS-Security 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 element.
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 element. Pour permettre l'interaction avec WSE 3.0, affectez WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10 à la valeur de l'attribut messageSecurityVersion.
Spécifiez que la version d'août 2004 de la spécification WS-Addressing est utilisée par WCF en ajoutant un textMessageEncoding element, puis affectez Soap11WSAddressingAugust2004 à messageVersion.
Remarque : Lorsque vous utilisez SOAP 1.2, affectez à l'attribut messageVersion la valeur Soap12WSAddressingAugust2004.
Spécifiez que le service utilise la liaison personnalisée.
Affectez la valeur customBinding à l'attribut binding de l'élément Service Endpoint.
Affectez à l'attribut bindingConfiguration de l'élément Service Endpoint la valeur spécifiée dans l'attribut name de binding element 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>