Статьи

Понимание WS-Policy, часть II: правила составления оператора и приложения

Следующая статья является отрывком из новой книги «Разработка контрактов веб-сервисов и управление версиями для SOA» [REF-1] Авторские права Prentice Hall / Pearson PTR и SOA Systems Inc. Обратите внимание, что некоторые ссылки на главы были намеренно оставлены в статье в соответствии с требования от Prentice Hall.

Автор этой статьи — Умит Ялкинальп и Томас Эрл. и опубликовано в журнале SOA в марте 2009 года.

Введение

Язык WS-Policy предоставляет набор функций, которые позволяют определять сложные и сложные политики, а также позволяют выбирать из целого ряда вариантов того, как политики могут быть присоединены и связаны с определениями WSDL. Во второй статье из WS-Policy, состоящей из двух частей, мы демонстрируем использование операторов и связанных правил композиции. Затем мы переходим к исследованию методов вложения политики, включая внешние и встроенные параметры вложения …

Правила
компоновки операторов Правила компоновки операторов часто называют «операторной алгеброй», но не позволяйте этому термину вспомнить ретроспективные занятия по математике в средней школе. Этот раздел на самом деле представляет собой более сложное обсуждение внутренних свойств элементов оператора и того, как эти свойства могут влиять на создаваемые вами структуры.

Важно понимать эти эффекты, потому что вы можете комбинировать операторы несколькими способами для создания очень сложных выражений политики. Фактически, один из наиболее интересных аспектов составления операторов заключается в том, что вы можете создавать составные политики, состоящие из политик, созданных вами и другими.

Определяемые WS-Policy операторы wsp: All и wsp: ExactlyOne имеют следующие свойства, которые составляют основу правил композиции операторов:

идемпотент
коммутативной
ассоциативный
wsp: все распространяется через wsp: ExactlyOne

В следующих разделах рассматривается, как эти правила применяются на практике, а также обсуждается использование пустых элементов оператора и сравнение wsp: Policy с wsp: All .

Правило
идемпотента Идемпотентность означает, что вложение нескольких вхождений операторов друг в друга эквивалентно одному вхождению. Другими словами, применение одного и того же оператора к себе несколько раз дает один и тот же результат.

Это означает, что следующая структура оператора …

<wsp:All>
<wsp:All>
<wsp:All>
<wsam:Addressing><wsp:Policy/></wsam:Addressing>
<wsrmp:RMAssertion><wsp:Policy/></wsrmp:RMAssertion>
</wsp:All>
</wsp:All>
</wsp:All>

 …эквивалентно:

<wsp:All>
<wsam:Addressing><wsp:Policy/></wsam:Addressing>
<wsrmp:RMAssertion><wsp:Policy/></wsrmp:RMAssertion>
</wsp:All>

Коммутативное правило

Коммутативность означает, что порядок дочерних элементов в конструкции оператора незначителен.
Другими словами, следующая структура оператора …

<wsp:All>
<wsam:Addressing><wsp:Policy/></wsam:Addressing>
<wsrmp:RMAssertion><wsp:Policy/></wsrmp:RMAssertion>
</wsp:All>

…эквивалентно:

<wsp:All>
<wsrmp:RMAssertion><wsp:Policy/></wsrmp:RMAssertion>
<wsam:Addressing><wsp:Policy/></wsam:Addressing>
</wsp:All>

Ассоциативное правило

Это правило позволяет упорядочить операторные конструкции, удаляя ненужные вложения.

Это означает, что следующая структура оператора …

<wsp:All>
<wsam:Addressing><wsp:Policy/></wsam:Addressing>
<wsp:All>
<wsrmp:RMAssertion><wsp:Policy/></wsrmp:RMAssertion>
<argt:responseGuarantee/>
</wsp:All>
</wsp:All>

 …эквивалентно:

<wsp:All>
<wsam:Addressing><wsp:Policy/></wsam:Addressing>
<wsrmp:RMAssertion><wsp:Policy/></wsrmp:RMAssertion>
<argt:responseGuarantee/>
</wsp:All>

wsp: все распределено по wsp: точно один

Это правило в основном используется для нормализации выражений политики. Это очень полезно при построении набора альтернатив в верхних слоях выражения с дополнительными альтернативами, вложенными в дочерние элементы. Применяя свойство распределения wsp: All , мы получили эквивалентное выражение с отдельной альтернативой, которая выражается в корне.

Это означает, что следующая структура оператора …

<wsp:All>
<wsp:ExactlyOne>
<wsam:Addressing><wsp:Policy/></wsam:Addressing>
<wsrmp:RMAssertion><wsp:Policy/></wsrmp:RMAssertion>
</wsp:ExactlyOne>
</wsp:All>

…эквивалентно:

<wsp:ExactlyOne>
<wsp:All>
<wsam:Addressing><wsp:Policy/></wsam:Addressing>
</wsp:All>
<wsp:All>
<wsrmp:RMAssertion><wsp:Policy/></wsrmp:RMAssertion>
</wsp:All>
</wsp:ExactlyOne>

Давайте рассмотрим более сложный пример, чтобы проиллюстрировать распределение. Следующая структура оператора …

<wsp:All>
<wsp:ExactlyOne>
<wsam:Addressing><wsp:Policy/></wsam:Addressing>
<wsrmp:RMAssertion><wsp:Policy/></wsrmp:RMAssertion>
</wsp:ExactlyOne>
<wsp:ExactlyOne>
<argt:responseGuarantee/>
</wsp:ExactlyOne>
</wsp:All>

…эквивалентно:

<wsp:ExactlyOne>
<wsp:All>
<wsam:Addressing><wsp:Policy/></wsam:Addressing>
<argt:responseGuarantee/>
</wsp:All>
<wsp:All>
<wsrmp:RMAssertion><wsp:Policy/></wsrmp:RMAssertion>
<argt:responseGuarantee/>
</wsp:All>
</wsp:ExactlyOne>

В первом примере каждая конструкция
wsp: ExactlyOne устанавливает альтернативу политики, но во втором есть только одно утверждение. Поскольку они дополнительно заключены в конструкцию
wsp: All , фактическими альтернативами выражения политики являются:

  • Альтернатива # 1: wsam: Addressing + argt: responseGuarantee
  • Альтернатива № 2: wsrmp: RMAssertion + argt: responseGuarantee

Это более четко выражено во втором примере из-за реструктуризации элементов wsp: ExactlyOne и wsp: All .
Мы рассмотрим понятия распределительного оператора далее в главе 16.

Пустые операторы

Иногда операторы политики не содержат утверждений политики. В этом случае они выражаются следующим образом: 

указывает на политику с нулевыми утверждениями.
указывает на политику с нулевыми альтернативами политики.

Знание этого синтаксиса важно, потому что пустое содержимое может повлиять на значение композиции оператора следующим образом:

<wsp:All>
<wsp:ExactlyOne>
<wsam:Addressing><wsp:Policy/></wsam:Addressing>
<wsrmp:RMAssertion><wsp:Policy/></wsrmp:RMAssertion>
</wsp:ExactlyOne>
<wsp:ExactlyOne/>
</wsp:All>

Выражение политики в этом примере по существу эквивалентно политике с нулевыми альтернативами политики, поскольку пустой оператор оператора (выделенный) не имеет утверждений.

Эквивалентность

До сих пор мы
изучали элементы операторов
wsp: All и
wsp: ExactlyOne . Однако мы также видели, что
элемент wsp: Policy также используется с различными дочерними элементами. Вам может быть интересно, как
элемент
wsp: Policy вписывается в правила композиции.
WSP: Политика элемент как оператор эквивалентен
WSP: Весь элемент. Поэтому пустая политика

эквивалентно
политика, которая содержит ноль утверждений.

Присоединение политик к определениям WSDL

WS-Policy как сама структура не была бы очень полезна без возможности связывать выражения политики с чем-либо. В этом разделе мы рассмотрим, как выражения политики могут быть присоединены к различным частям определения WSDL с помощью функций из стандарта WS-PolicyAttachment.

Существует два способа прикрепления политик к документам WSDL:

Код выражения политики может быть встроен в определение WSDL, а затем использован через нативные ссылки, которые могут быть присоединены непосредственно к элементам WSDL в качестве дочерних элементов расширяемости.
Выражения политики могут постоянно находиться в отдельном документе определения WS-Policy, на который затем ссылаются в документе WSDL через механизм внешних вложений.

Раздел «Присоединение политик к определениям WSDL» в этой главе и раздел « Повторное использование и централизация политик » в главе 16 объясняют каждый из этих вариантов. Но сначала нам нужно охватить несколько основных связанных с вложениями тем в следующих двух разделах.

Точки присоединения к политике и субъекты политики К
любой части определения WSDL, к которой мы прикрепляем политику, указывается как точка присоединения к политике . Например, у нас может быть политика, прикрепленная к элементу операции, а затем другая к одному из элементов сообщения этой операции .

В WSDL 1.1 следующие элементы представляют общие точки подключения политики:

элемент обслуживания
элемент порта
обязательный элемент
элемент portType
элемент операции
элемент сообщения

Спецификация вложения политики организует эти точки вложения политики в следующие четыре отдельных предмета политики :

обслуживание
Конечная точка
операция
Сообщение

Каждый субъект политики представляет предопределенную область в общем определении WSDL. Например, одно выражение может применяться только к конкретному сообщению, тогда как другое может иметь область действия, соответствующую всей операции. В последнем случае выражение политики будет применимо ко всем определениям сообщений, относящимся к этой операции.

Давайте обсудим темы политики индивидуально.

Субъект политики обслуживания

Этот предмет соответствует
элементу
обслуживания в конкретном описании документа WSDL. Поэтому выражение политики, прикрепленное к субъекту службы, будет применяться ко всем сообщениям, связанным с
конструкциями
портов, которые попадают в
службу.построить. Это делает эту тему родительской или главной темой, поскольку выражение политики, прикрепленное на этом уровне, в значительной степени влияет на все определения сообщений в документе WSDL.

Мы еще не рассмотрели, как политики прикрепляются к частям определения WSDL, но на этом этапе давайте хотя бы покажем точку вставки для кода политики, чтобы у нас было лучшее представление о том, как политика может быть присоединена к предмет политики обслуживания:

<service name="svPurchaseOrder">
<!-- Insert Policy Expression Here -->
<port name="purchaseOrder-http-soap11"
binding="tns:bdPO-SOAP11HTTP">
<soap11:address location=
"http://actioncon.com/services/soap11/po"/>
</port>
</service>

Субъект политики конечной точки Субъект

политики обслуживания казался довольно простым, но с этим все немного сложнее. Термин «конечная точка» в данном случае относится к комбинации следующих трех элементов:

порт
переплет
PortType

Поэтому, если вы присоединяете выражение политики к любому из этих трех элементов, вы присоединяете его к субъекту политики конечной точки.

Чтобы лучше понять это, сначала подумайте о том, как эти три элемента связаны с точки зрения обмена сообщениями. Определение типа Aport включает в себя операции, которые имеют определения сообщений. Но тип порта должен быть привязан к конкретному протоколу через соответствующее определение привязки, которому, в свою очередь, нужен адрес, предоставленный определением порта. Другими словами, все три элемента относятся к одному и тому же набору сообщений (те, которые изначально определены в конструкции portType ).

Поскольку, как мы заявляли ранее, выражения политики основаны на установлении качеств и свойств, связанных с обменом сообщениями, объединение этих трех элементов в единый предмет политики имеет большой смысл.

Вот посмотрите, куда будет идти код политики в случае элемента привязки :

<binding name="bdPO-SOAP12HTTP" type="ptPurchaseOrder">
<!-- Insert Policy Expression Here -->
<soap12bind:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="opSubmitOrder">
...
</operation>
...
</binding>

Предмет политики деятельности

Вы могли заметить, что по мере проработки этого списка область применения политики становится меньше. Теперь мы спускаемся по лестнице на рабочий уровень.
Следуя тому же объяснению, которое мы только что объяснили для субъекта политики конечных точек, вы присоединяете политику к субъекту политики операций, когда присоединяете ее к любому из следующих двух элементов:

операции элемент PortType конструкции
операции элемент связывания конструкции

Опять же, это потому, что эти два элемента так тесно связаны и представляют один и тот же набор определений сообщений.

Давайте посмотрим, куда идет выражение политики:

<operation name="opSubmitOrder">
<!-- Insert Policy Expression Here -->
<soap12bind:operation
soapAction="http://action.com/submitOrder/request"
soapActionRequired="true" required="true"/>
<input>
<soap12bind:body use="literal"/>
</input>
<output>
<soap12bind:body use="literal"/>
</output>
</operation>

Тема политики сообщений

Этот последний субъект политики просто позволяет вам точно определить определение сообщения с помощью выражения политики. Все предыдущие темы группировали сообщения вместе, но бывают случаи, когда выражение настолько специфично, что оно применимо только к конкретному сообщению.

Поскольку данное сообщение будет определяться с помощью
элементов
сообщения в абстрактном и конкретном описании, эта тема представляет собой любую из следующих возможных пар элементов:

входной элемент в операции конструкции в PortType конструкции + входной элемент в операции конструкции в связывающей конструкции
выходной элемент в операции конструкции в PortType конструкции + выходной элемент в операции конструкции в связывающей конструкции
неисправность элемента в операции конструкции в PortType конструкции + неисправность элемента в операции конструкции в связывающей конструкции

Другими словами, если вы прикрепите политику к одному из трех определений сообщений в абстрактном или конкретном описании, вы присоедините выражение к теме политики сообщений.

Опять же, это имеет смысл, потому что два (абстрактный и конкретный) элементы представляют одно и то же сообщение. Но просто для того, чтобы доказать это, вот еще один пример:

<input>
<!-- Insert Policy Expression Here -->
<soap12bind:body use="literal"/>
</input>

Субъекты политики

WSDL 2.0 В WSDL 2.0 внесены некоторые изменения в том, как точки присоединения организованы в субъекты политики, в первую очередь связанные с определениями отказов (в таблице 10.1 представлен обзор).

Элемент WSDL Тема политики
wsdl20: обслуживание оказание услуг
wsdl20: конечная точка
wsdl20: привязка
wsdl20: интерфейс
конечная точка
wsdl20: привязка / wsdl20: операция
wsdl20: интерфейс / wsdl20: операция
операция
wsdl20: привязка / wsdl20: операция / wsdl20: ввод
wsdl20: интерфейс / wsdl20: операция / wsdl20: ввод
сообщение
(для входного сообщения)
wsdl20: привязка / wsdl20: операция / wsdl20: вывод
wsdl20: интерфейс / wsdl20: операция / wsdl20: вывод
сообщение
(для выходного сообщения)
wsdl20: привязка / wsdl20: ошибка
wsdl20: интерфейс / wsdl20: ошибка
wsdl20: привязка / wsdl20: операция / wsdl20: ошибка
wsdl20: привязка / wsdl20: интерфейс / wsdl20: ошибка
сообщение
(для сообщения об
ошибке ввода )
wsdl20: привязка / wsdl20: ошибка
wsdl20: интерфейс / wsdl20: ошибка
wsdl20: привязка / wsdl20: операция / wsdl20: выход
из строя
сообщение
(для сообщения об
ошибке на выходе )

WSP: PolicyReference Элемент WSP: PolicyReference элемент является эквивалент включаемым заявления в том , что он позволяет вывести содержимое одного выражения политики в другую. Он содержит атрибут URI, который ссылается на значение wsu: Id выражения политики для включения.

<wsp:Policy>
<wsp:PolicyReference URI="#reliability-policy"/>
<wsam:Addressing>
<wsp:Policy/>
</wsam:Addressing>
</wsp:Policy>

<wsp:Policy wsu:Id="reliability-policy">
<wsrmp:RMAssertion>
<wsp:Policy/>
</wsrmp:RMAssertion>
</wsp:Policy>

В этом примере содержимое выражения политики, озаглавленного «надежность-политика», включено в верхнее выражение политики, что приведет к составной политике, состоящей из обоих типов утверждений: wsrmp: RMAssertion и wsam: Addressing .

Использование значения wsu: Id было введено в начале этой главы в разделе « Новые пространства имен и префиксы ». Это очень похоже на атрибут расширяемости, так как позволяет назначать идентификатор выражению политики, чтобы на него можно было ссылаться в другом месте.

Встроенные вложения
Чтобы встроить выражение политики в документ WSDL, мы просто добавляем код политики в конструкцию определений WSDL вместе с требуемым пространством имен, как указано выделенными разделами в этом примере.

<definitions targetNamespace=
"http://actioncon.com/contract/po"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://actioncon.com/contract/po"
xmlns:po="http://actioncon.com/schema/po"
xmlns:soap11bind="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap12bind="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:wsp="http://www.w3.org/2006/07/ws-policy"
xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
xmlns:wsrmp="http://docs.oasis-open.org/ws-rx/wsrmp/200702"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-
200401-wss-wssecurity-utility-1.0.xsd">
...
...
...
<wsp:Policy wsu:Id="composite-policy">
<wsp:PolicyReference URI="#security-policy"/>
<wsam:Addressing>
<wsp:Policy/>
</wsam:Addressing>
<wsrmp:RMAssertion optional="true"/>
</wsp:Policy>
<wsp:Policy wsu:Id="security-policy">
...
</wsp:Policy>
</definitions>

Возможно, вы заметили следующую дополнительную строку кода в первом утверждении встроенной политики предыдущего примера:

<wsp:PolicyReference URI="#security-policy"/> 

Здесь мы видим, что элемент wsp: PolicyReference снова используется в качестве механизма включения между двумя отдельными выражениями политики. Хотя предыдущий пример показал, что этот элемент включает содержимое политики в выражения политики, он также используется при привязке встроенных утверждений политики к элементам WSDL, как показано в следующем примере.

<binding name="bdPO-SOAP12HTTP" type="tns:ptPurchaseOrder">
<wsp:PolicyReference URI="#composite-policy"/>
<soap12bind:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="opSubmitOrder">
<soap12bind:operation
soapAction="http://action.com/submitOrder/request"
soapActionRequired="true" required="true"/>
<input>
<soap12bind:body use="literal"/>
</input>
<output>
<soap12bind:body use="literal"/>
</output>
</operation>
...
</binding>

Здесь конструкция привязки WSDL содержит элемент расширяемости, состоящий из элемента wsp: PolicyReference, который устанавливает ссылку на выражение политики, называемое «составной-политикой».

Обратите внимание, что код выражения «составная политика» мог быть просто встроен непосредственно в конструкцию привязки WSDL . Поскольку был использован элемент wsp: PolicyReference , теперь это выражение можно использовать в другом месте в определении WSDL. Например, вы заметите, что этот пример состоит из привязки для SOAP 1.2. Если документ WSDL также поддерживает SOAP 1.1, то же утверждение политики можно было бы повторно использовать, добавив тот же элемент wsp: PolicyReference к привязке SOAP 1.1.

Полное определение WSDL с приложенным выражением политики

Одна из причин, по которой Стив изначально разработал контракт веб-службы для службы заказов на покупку, чтобы включить привязки SOAP 1.1 и 1.2, заключается в том, что эта служба может учитывать потребителей разных типов. Те, кто поддерживает SOAP 1.2, обычно имеют более прогрессивные платформы и поэтому могут поддерживать дополнительные функции WS- *.

В частности, у Стива есть требование к службе использовать заголовки WS-Addressing (объяснено в Главе 18). Однако после переговоров с Кевином, техническим директором, возникло нежелание навязывать требование, чтобы все потребители поддерживали WS-адресацию. Поэтому Кевин и Стив решают, что только те потребители, которые общаются с сервисом через SOAP 1.2, также должны поддерживать обработку заголовков WS-Addressing, которые они будут проектировать.

Чтобы реализовать это новое требование, создается простое выражение политики, а определение WSDL обновляется в соответствии с выделенным кодом:

<definitions name="Purchase Order"
targetNamespace="http://actioncon.com/contract/po
xmlns:tns="http://actioncon.com/contract/po"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:po="http://actioncon.com/schema/po"
xmlns:soap11="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:wsp="http://www.w3.org/2006/07/ws-policy"
xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-
200401-wss-wssecurity-utility-1.0.xsd">
<documentation>
This is an entity service responsible for purchase
order-related processing only.
</documentation>
<types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace=
"http://actioncon.com/schema/po"
schemaLocation="http://actioncon.com/schema/po.xsd"/>
</xsd:schema>
</types>
<message name="msgSubmitOrderRequest">
<part name="PurchaseOrder" element="po:purchaseOrder"/>
</message>
<message name="msgSubmitOrderResponse">
<part name="Acknowledgement" element="po:acknowledgement"/>
</message>
<message name="msgCheckOrderRequest">
<part name="PONumber" element="po:poNumber"/>
</message>
<message name="msgCheckOrderResponse">
<part name="Status" element="po:status"/>
</message>
<message name="msgChangeOrderRequest">
<part name="PurchaseOrder" element="po:purchaseOrder"/>
</message>
<message name="msgChangeOrderResponse">
<part name="Acknowledgement" element="po:acknowledgement"/>
</message>
<message name="msgCancelOrderRequest">
<part name="PONumber" element="po:poNumber"/>
</message>
<message name="msgCancelOrderResponse">
<part name="Acknowledgement" element="po:acknowledgement"/>
</message>
<portType name="ptPurchaseOrder">
<operation name="opSubmitOrder">
<input message="tns:msgSubmitOrderRequest"/>
<output message="tns:msgSubmitOrderResponse"/>
</operation>
<operation name="opCheckOrderStatus">
<input message="tns:msgCheckOrderRequest"/>
<output message="tns:msgCheckOrderResponse"/>
</operation>
<operation name="opChangeOrder">
<input message="tns:msgChangeOrderRequest"/>
<output message="tns:msgChangeOrderResponse"/>
</operation>
<operation name="opCancelOrder">
<input message="tns:msgCancelOrderRequest"/>
<output message="tns:msgCancelOrderResponse"/>
</operation>
</portType>
<binding name="bdPO-SOAP11HTTP" type="tns:ptPurchaseOrder">
<soap11:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="opSubmitOrder">
<input>
<soap11:body use="literal"/>
</input>
<output>
<soap11:body use="literal"/>
</output>
</operation>
<operation name="opCheckOrderStatus">
<input>
<soap11:body use="literal"/>
</input>
<output>
<soap11:body use="literal"/>
</output>
</operation>
<operation name="opChangeOrder">
<input>
<soap11:body use="literal"/>
</input>
<output>
<soap11:body use="literal"/>
</output>
</operation>
<operation name="opCancelOrder">
<input>
<soap11:body use="literal"/>
</input>
<output>
<soap11:body use="literal"/>
</output>
</operation>
</binding>
<binding name="bdPO-SOAP12HTTP" type="tns:ptPurchaseOrder">
<wsp:PolicyReference URI="#addressing-policy"/>
<soap12:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="opSubmitOrder">
<soap12:operation soapAction=
"http://actioncon.com/submitOrder/request"
soapActionRequired="true" wsdl:required="true"/>
<input>
<soap12:body use="literal"/>
</input>
<output>
<soap12:body use="literal"/>
</output>
</operation>
<operation name="opCheckOrderStatus">
<soap12:operation soapAction=
"http://actioncon.com/submitOrder/request"
soapActionRequired="true" wsdl:required="true"/>
<input>
<soap12:body use="literal"/>
</input>
<output>
<soap12:body use="literal"/>
</output>
</operation>
<operation name="opChangeOrder">
<soap12:operation soapAction=
"http://actioncon.com/submitOrder/request"
soapActionRequired="true" wsdl:required="true"/>
<input>
<soap12:body use="literal"/>
</input>
<output>
<soap12:body use="literal"/>
</output>
</operation>
<operation name="opCancelOrder">
<soap12:operation soapAction=
"http://actioncon.com/submitOrder/request"
soapActionRequired="true" wsdl:required="true"/>
<input>
<soap12:body use="literal"/>
</input>
<output>
<soap12:body use="literal"/>
</output>
</operation>
</binding>
<service name="svPurchaseOrder">
<port name="purchaseOrder-http-soap11"
binding="tns:bdPO-SOAP11HTTP">
<soap11:address location=
"http://actioncon.com/services/soap11/po"/>
</port>
<port name="purchaseOrder-http-soap12"
binding="tns:bdPO-SOAP12HTTP">
<soap12:address location=
"http://actioncon.com/services/soap12/po"/>
</port>
</service>
<wsp:Policy wsu:Id="addressing-policy">
<wsam:Addressing><wsp:Policy/>
</wsam:Addressing>
</wsp:Policy>
</definitions>

Заключение

Политики могут превратить обычный технический интерфейс в богатый бизнес-ориентированный API, способный обеспечивать соблюдение и передачу правил и требований различных типов на уровне контракта. Мы только что коснулись этой статьи, поскольку в языке WS-Policy есть много более сложных функций.

Ссылки

[REF-1] «Разработка и создание версий контракта веб-сервиса для SOA» Томаса Эрла, Аниша Кармаркара, Присциллы Уолмсли, Хьюго Хааса, Умит Ялкинальп, Каньянга Кевина Лю, Дэвида Орчарда, Андре Тоста, Джеймса Пашли для «Prentice Hall Service» Серия ориентированных вычислений от Томаса Эрла «, Copyright Prentice Hall / Pearson PTR и SOA Systems Inc.,
http://www.soabooks.com/wsc/

Эта статья была первоначально опубликована в журнале The SOA Magazine ( www.soamag.com ), официально связанном с серией сервис-ориентированных вычислений Prentice Hall от Томаса Эрла ( www.soabooks.com ). Copyright © SOA Systems Inc. ( www.soasystems.com )