Миграция веб-служб WSE 3.0 на платформу WCF
К преимуществам переноса веб-служб WSE 3.0 на Windows Communication Foundation (WCF) относятся повышение производительности и поддержка дополнительных транспортов, дополнительных сценариев безопасности и спецификаций WS-*. При переносе веб-службы с WSE 3.0 на WCF можно добиться повышения производительности от 200% до 400%. Дополнительные сведения о транспортах, поддерживаемых WCF, см. в разделе Выбор транспортов. Список сценариев, поддерживаемых WCF, см. в разделе Типовые сценарии безопасности. Список спецификаций, поддерживаемых WCF, см. в разделе Руководство по взаимодействию по протоколам веб-служб.
В следующих разделах приведены указания по переносу определенных функций веб-службы WSE 3.0 на WCF.
Общие сведения
Приложения WSE 3.0 и WCF совместимы на уровне каналов связи и используют одинаковый набор терминов. Совместимость приложений WSE 3.0 и WCF на уровне канала связи обусловлена набором спецификаций WS-*, поддерживаемых обеими средами. При разработке приложения WSE 3.0 или WCF используется общий набор терминов, таких как имена готовых к использованию утверждений безопасности в WSE и режимы проверки подлинности.
Несмотря на наличие многих общих аспектов в моделях программирования WCF и ASP.NET или WSE 3.0 эти модели различаются. Дополнительные сведения о модели программирования WCF см. в разделе Базовый жизненный цикл программирования.
Примечание |
---|
При переносе веб-службы WSE на WCF для создания клиента можно использовать средство Служебное средство ServiceModel Metadata Utility Tool (Svcutil.exe). Такой клиент содержит интерфейсы и классы, которые можно использовать в качестве отправной точки и для службы WCF. Созданные интерфейсы имеют атрибут OperationContractAttribute, применяемый ко всем членам контракта, у которых свойству ReplyAction присвоено значение * . При вызове клиентом WSE веб-службы с этим параметром возникает следующее исключение: Web.Services3.ResponseProcessingException: WSE910. Произошла ошибка в процессе обработки ответного сообщения. Сведения об ошибке см. во внутреннем исключении. Чтобы избежать такой ситуации, присвойте свойству ReplyAction атрибута OperationContractAttribute значение, отличное от null, например http://Microsoft.WCF.Documentation/ResponseToOCAMethod .
|
Безопасность
Защита веб-служб WSE 3.0 обеспечивается с помощью файла политики.
Службы WCF могут использовать файл конфигурации для защиты службы. Этот механизм аналогичен использованию файла политики WSE 3.0. В WSE 3.0 при защите веб-службы с помощью файла политики используется либо готовое к использованию утверждение безопасности, либо утверждение пользовательской политики. Готовые к использованию утверждения безопасности тесно связаны с режимом проверки подлинности элемента привязки безопасности WCF. Режимы проверки подлинности WCF и готовые к использованию утверждения безопасности в WSE 3.0 не только имеют одинаковые или похожие имена, но и используют одинаковые типы учетных данных для защиты сообщений. Например, готовое к использованию утверждение безопасности usernameForCertificate в WSE 3.0 соответствует режиму проверки подлинности UsernameForCertificate в WCF. В следующем примере кода показано, как минимальная политика с готовым к использованию утверждением безопасности usernameForCertificate в WSE 3.0 сопоставляется с режимом проверки подлинности UsernameForCertificate в WCF в пользовательской привязке.
WSE 3.0
<policies>
<policy name="MyPolicy">
<usernameForCertificate messageProtectionOrder="SignBeforeEncrypt"
requireDeriveKeys="true"/>
</policy>
</policies>
WCF
<customBinding>
<binding name="MyBinding">
<security authenticationMode="UserNameForCertificate"
messageProtectionOrder="SignBeforeEncrypt"
requireDerivedKeys="true"/>
</binding>
</customBinding>
Чтобы перенести параметры безопасности веб-службы WSE 3.0, указанные в файле политики, в WCF, необходимо создать в файле конфигурации пользовательскую привязку и задать готовому к использованию утверждению безопасности эквивалентный режим проверки подлинности. Кроме того, необходимо настроить пользовательскую привязку для использования версии спецификации WS-Addressing от августа 2004 г. при взаимодействии клиентов WSE 3.0 с этой службой. Если перенесенная служба WCF не будет взаимодействовать с клиентами WSE 3.0 и должна только обеспечить одинаковый уровень безопасности, следует рассмотреть возможность использования системных привязок WCF с соответствующими параметрами безопасности вместо создания пользовательской привязки.
В следующей таблице приведено сопоставление файла политики WSE 3.0 с эквивалентными пользовательскими привязками в WCF.
Готовое к использованию утверждение безопасности WSE 3.0 | Конфигурация пользовательской привязки WCF |
---|---|
<usernameOverTransportSecurity /> |
|
<mutualCertificate10Security /> |
|
<usernameForCertificateSecurity /> |
|
<anonymousForCertificateSecurity /> |
|
<kerberosSecurity /> |
|
<mutualCertificate11Security /> |
|
Дополнительные сведения о создании пользовательских привязок в WCF см. в разделе Пользовательские привязки.
Веб-службы WSE 3.0, защищаемые с использованием кода приложения
При использовании WSE 3.0 и WCF требования безопасности можно задавать не только в конфигурации, но и в коде приложения. В WSE 3.0 для этого создается класс, наследуемый от класса Policy, и добавляются требования путем вызова метода Add. Дополнительные сведения о задании требований безопасности в коде см. в разделе How to: Secure a Web Service Without Using a Policy File. В WCF для задания требований безопасности в коде создается экземпляр класса BindingElementCollection, а затем экземпляр класса SecurityBindingElement добавляется в коллекцию BindingElementCollection. Требования утверждений безопасности задаются с использованием статических методов поддержки режима проверки подлинности класса SecurityBindingElement. Дополнительные сведения о задании требований безопасности в коде с помощью WCF см. в разделах Как создавать пользовательскую привязку с использованием элемента SecurityBindingElement и Как создать SecurityBindingElement для заданного режима проверки подлинности.
Утверждение пользовательской политики WSE 3.0
В WSE 3.0 предусмотрены два типа утверждений пользовательской политики: утверждения, обеспечивающие защиту сообщения SOAP, и утверждения, не обеспечивающие защиту сообщения SOAP. Утверждения политики, обеспечивающие защиту сообщений SOAP, наследуются от класса WSE 3.0 SecurityPolicyAssertion, концептуальным эквивалентом в WCF является класс SecurityBindingElement.
Обратите внимание на следующий важный момент. Готовые к использованию утверждения безопасности WSE 3.0 являются подмножеством режимов проверки подлинности WCF. В случае создания утверждения пользовательской политики в WSE 3.0 в WCF может существовать эквивалентный режим проверки подлинности. Например, в WSE 3.0 отсутствует утверждение безопасности CertificateOverTransport, эквивалентное готовому к использованию утверждению безопасности UsernameOverTransport. Вместо этого для целей проверки подлинности клиента используется сертификат X.509. В случае определения собственного утверждения пользовательской политики для этого сценария процесс переноса в WCF осуществляется очень просто. WCF определяет режим проверки подлинности для этого сценария, что позволяет использовать статические методы поддержки режима проверки подлинности для настройки элемента WCF SecurityBindingElement.
При отсутствии режима проверки подлинности WCF, эквивалентного утверждению пользовательской политики для защиты сообщения SOAP, следует создать класс, наследуемый от класса TransportSecurityBindingElement, SymmetricSecurityBindingElement или AsymmetricSecurityBindingElement WCF, и задать эквивалентный элемент привязки. Дополнительные сведения см. в разделе Как создавать пользовательскую привязку с использованием элемента SecurityBindingElement.
Сведения о преобразовании утверждения пользовательской политики, не обеспечивающего защиту сообщения SOAP, см. в разделе Фильтрация и образце Пользовательский перехватчик сообщений.
Пользовательский маркер безопасности WSE 3.0
Модель программирования WCF для создания пользовательского маркера отлична от модели WSE 3.0. Дополнительные сведения о создании пользовательского маркера в WSE см. в разделе Creating Custom Security Tokens. Дополнительные сведения о создании пользовательского маркера в WCF см. в разделе Как создавать пользовательский маркер.
Пользовательский диспетчер маркеров WSE 3.0
Модель программирования для создания пользовательского диспетчера маркеров в WCF отлична от модели WSE 3.0. Дополнительные сведения о создании пользовательского диспетчера маркеров и других компонентов, необходимых для пользовательского маркера безопасности, см. в разделе Как создавать пользовательский маркер.
Примечание |
---|
В случае создания пользовательского диспетчера маркеров безопасности UsernameToken в WCF предусмотрен более простой механизм задания логики проверки подлинности, чем создание пользовательского диспетчера маркеров безопасности. Дополнительные сведения см. в разделе Как использовать пользовательский проверяющий элемент управления для имени пользователя и пароля. |
Веб-службы WSE 3.0, использующие сообщения SOAP с кодировкой MTOM
Приложение WCF, также как и приложение WSE 3, может задавать кодирование сообщений MTOM в конфигурации. Для переноса этого параметра следует добавить mtomMessageEncoding element в привязку для этой службы. В следующем примере кода показано задание кодировки MTOM в WSE 3.0 для службы, имеющей эквивалент в WCF.
WSE 3.0
<messaging>
<mtom clientMode="On"/>
</messaging>
WCF
<customBinding>
<binding name="MyBinding">
<mtomMessageEncoding/>
</binding>
</customBinding>
Обмен сообщениями
Приложения WSE 3.0, использующие API обмена сообщениями WSE
Если для прямого доступа к данным XML, передаваемым между клиентами и веб-службами, используется API обмена сообщениями WSE, приложение можно преобразовать для использования POX (Plain Old XML). Дополнительные сведения о POX см. в разделе Взаимодействие с приложениями POX. Дополнительные сведения о API обмена сообщениями WSE см. в разделе Sending and Receiving SOAP Messages Using WSE Messaging API.
Транспорты
TCP
По умолчанию клиенты и веб-службы WSE 3.0, отправляющие сообщения SOAP с использованием транспорта TCP, не могут взаимодействовать с клиентами и веб-службами WCF. Эта несовместимость обусловлена различиями в кадрировании в протоколе TCP и причинами, связанными с обеспечением производительности. Однако в образце WCF показано, как реализовать пользовательский сеанс TCP, который может взаимодействовать с WSE 3.0. Дополнительные сведения об этом образце см. в разделе Transport: WSE 3.0 TCP Interoperability.
Чтобы указать, что приложение WCF использует транспорт TCP, используйте netTcpBinding Element.
Пользовательский транспорт
Эквивалентом пользовательского транспорта WSE 3.0 в WCF является расширение канала. Дополнительные сведения о создании расширения канала см. в разделе Расширение уровня каналов.
См. также
Задачи
Как создать SecurityBindingElement для заданного режима проверки подлинности
Основные понятия
Базовый жизненный цикл программирования
Пользовательские привязки
Как создавать пользовательскую привязку с использованием элемента SecurityBindingElement