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