Как настраивать службы WCF для взаимодействия с клиентами WSE 3.0
Службы Windows Communication Foundation (WCF) на уровне каналов связи совместимы с клиентами расширений веб-служб версии 3.0 для Microsoft .NET (WSE), если службы WCF настроены на использование спецификации WS-Addressing (версия от августа 2004 г.).
Включение службы WCF для взаимодействия с клиентами WSE 3.0
Определите пользовательскую привязку для службы WCF.
Чтобы указать, что для кодирования сообщений используется версия спецификации WS-Addressing от августа 2004 г., необходимо создать пользовательскую привязку.
Добавьте дочерний элемент customBinding Element в элемент <Bindings> файла конфигурации службы.
Задайте имя привязки, добавив элемент binding element в элемент customBinding Element и указав атрибут name.
Задайте режим проверки подлинности и версию спецификации WS-Security, которые используются для защиты сообщений, совместимых с WSE 3.0. Для этого добавьте дочерний элемент Security element в элемент binding element.
Чтобы установить режим проверки подлинности, задайте атрибут authenicationMode элемента Security element. Режим проверки подлинности примерно соответствует готовому к использованию утверждению безопасности в WSE 3.0. В следующей таблице показано соответствие между режимами проверки подлинности WCF и готовыми к использованию утверждениями безопасности в WSE 3.0.
Режим проверки подлинности WCF Готовое к использованию утверждение безопасности WSE 3.0 anonymousForCertificateSecurity
kerberosSecurity
mutualCertificate10Security*
MutualCertificate
mutualCertificate11Security*
usernameOverTransportSecurity
usernameForCertificateSecurity
* Одно из основных различий между готовыми к использованию утверждениями безопасности mutualCertificate10Security и mutualCertificate11Security связано с версией спецификации WS-Security, используемой в WSE для защиты сообщений SOAP. Для mutualCertificate10Security используется версия WS-Security 1.0, а для mutualCertificate11Security — версия WS-Security 1.1. В WCF версия спецификации WS-Security задается в атрибуте messageSecurityVersion элемента Security element.
Чтобы определить версию спецификации WS-Security, используемую для защиты сообщений SOAP, задайте атрибут messageSecurityVersion элемента Security element. Для взаимодействия с WSE 3.0 установите для атрибута messageSecurityVersion значение WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10.
Укажите, что в WCF используется версия спецификации WS-Addressing от августа 2004 г., добавив элемент textMessageEncoding element и задав для атрибута messageVersion значение Soap11WSAddressingAugust2004.
Примечание
При использовании протокола SOAP 1.2 задайте для атрибута messageVersion значение Soap12WSAddressingAugust2004.
Укажите, что служба использует пользовательскую привязку.
Задайте для атрибута binding элемента Service Endpoint значение customBinding.
Задайте для атрибута bindingConfiguration элемента Service Endpoint значение, указанное в атрибуте name элемента binding element пользовательской привязки.
Пример
Следующий пример кода задает, что служба Service.HelloWorldService
использует для взаимодействия с клиентами WSE 3.0 пользовательскую привязку. Пользовательская привязка задает, что для кодирования пересылаемых сообщений используется версия спецификация WS-Addressing от августа 2004 г. и набор спецификаций WS-Security 1.1. Защита сообщений обеспечивается с помощью режима проверки подлинности 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>