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
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> enfant à l’élément <bindings> du fichier de configuration du service.
Spécifiez un nom pour la liaison, en ajoutant un élément <binding> à l’élément <customBinding> 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 é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
etmutualCertificate11Security
concerne la version de la spécification WS-Security qui est utilisée par WSE pour sécuriser les messages SOAP. PourmutualCertificate10Security
, 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 pourmutualCertificate11Security
. Pour WCF, la version de la spécification WS-Security utilisée est spécifiée dans l'attributmessageSecurityVersion
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, affectezmessageSecurityVersion
à la valeur de l'attribut WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10.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.
Spécifiez que le service utilise la liaison personnalisée.
Définissez l'attribut
binding
de l'élément <endpoint> à la valeurcustomBinding
.Définissez l'attribut
bindingConfiguration
de l'élément <endpoint> à la valeur qui est spécifiée dans l'attributname
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>