Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Материалы по SOA / Материал по SOA.doc
Скачиваний:
58
Добавлен:
01.05.2014
Размер:
934.91 Кб
Скачать

Использование soap поверх Email

Разработчики приложений могут использовать также email-инфраструктуру для передачи SOAP-сообщений, причем как текст email-сообщений так и их вложения. Примеры, приведенные ниже, иллюстрируют такой метод передачи SOAP-сообщений, однако они не должны трактоваться как некие стандартные способы реализации этого метода. Спецификации SOAP Версия 1.2 не специфицируют подобную привязку. Хотя существует неофициальныйW3C Note [E-mail-привязка SOAP], описывающий email-привязку для SOAP. Его основная цель - продемонстрировать применение общей Структуры Протокольной Привязки SOAP, описанной в [SOAP Часть 1].

Пример 14показывает сообщение, реализующее запрос на бронирование путешествия изпримера 1, передаваемый как email-сообщение между отправляющим и принимающим mail-агентами пользователя. (Подразумевается, что отправляющий узел также умеет интерпретировать SOAP и способен обрабатывать любые SOAP-ошибки, полученные в ответ на исходящее сообщение, а также коррелировать любые входящие ответные SOAP-сообщения).

Пример 14

From: a.oyvind@mycompany.example.com

To: reservations@travelcompany.example.org

Subject: Travel to LA

Date: Thu, 29 Nov 2001 13:20:00 EST

Message-Id: <EE492E16A090090276D208424960C0C@mycompany.example.com>

Content-Type: application/soap+xml

<?xml version='1.0' ?>

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">

<env:Header>

<m:reservation xmlns:m="http://travelcompany.example.org/reservation"

env:role="http://www.w3.org/2003/05/soap-envelope/role/next"

env:mustUnderstand="true">

<m:reference>uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d</reference>

<m:dateAndTime>2001-11-29T13:20:00.000-05:00</m:dateAndTime>

</m:reservation>

<n:passenger xmlns:n="http://mycompany.example.com/employees"

env:role="http://www.w3.org/2003/05/soap-envelope/role/next"

env:mustUnderstand="true">

<n:name>Еke Jуgvan Шyvind</n:name>

</n:passenger>

</env:Header>

<env:Body>

<p:itinerary

xmlns:p="http://travelcompany.example.org/reservation/travel">

<p:departure>

<p:departing>New York</p:departing>

<p:arriving>Los Angeles</p:arriving>

<p:departureDate>2001-12-14</p:departureDate>

<p:departureTime>late afternoon</p:departureTime>

<p:seatPreference>aisle</p:seatPreference>

</p:departure>

<p:return>

<p:departing>Los Angeles</p:departing>

<p:arriving>New York</p:arriving>

<p:departureDate>2001-12-20</p:departureDate>

<p:departureTime>mid morning</p:departureTime>

<p:seatPreference/>

</p:return>

</p:itinerary>

<q:lodging

xmlns:q="http://travelcompany.example.org/reservation/hotels">

<q:preference>none</q:preference>

</q:lodging>

</env:Body>

</env:Envelope>

SOAP-сообщение примера 1, передаваемое в SMTP-сообщении

Заголовок в примере 14реализован в стандартном для email-сообщений виде [RFC 2822].

Хотя email характеризуется односторонним обменом сообщениями и не гарантирует их доставку, транспортные протоколы, подобные Simple Mail Transport Protocol (SMTP) (SMTP) specification [SMTP], все же предоставляют механизм извещения о доставке, который, в случае с SMTP, называется Delivery Status Notification (DSN) и Message Disposition Notification (MDN). Извещения имеют вид email-сообщений, отправленных на email-адрес, указанный в заголовке email-сообщения. Приложения, так же как и email-пользователи, могут использовать эти механизмы для получения статуса передачи email-сообщения, однако эти извещения, будучи доставлены, являются сообщениями SMTP-уровня. Разработчик приложений должен хорошо понимать возможности и ограничения этих извещений о доставке, также как и риск того, что извещение может не быть сформировано в случае успешной доставки email-сообщения.

SMTP-сообщения статуса доставки являются иными, нежели сообщения, обрабатываемые на SOAP-уровне. SOAP-отклики на содержащиеся в email-сообщении SOAP-данные, получаемые в результате, будут возвращены с помощью email-сообщения, которое может содержать (а может и не содержать) SMTP-ссылку на оригинальное email-сообщение. Использование заголовка In-reply-to:[RFC 2822] может помочь в достижении корреляции на SMTP-уровне, но не обязательно позволит коррелировать сообщения на SOAP-уровне.

Пример 15is продолжает сценарийпримера 2и демонстрирует SOAP-сообщение (детали тела сообщения для краткости опущены), отправленное приложением продажи билетов приложению бронирования путешествия, и проясняющее некоторые детали бронирования, кроме уже переданных email-сообщением. В этом примере Message-Idоригинального email-сообщения передан в дополнительном email-заголовкеIn-reply-to:, который коррелирует email-сообщения на SMTP-уровне, однако не позволяет корреляцию на SOAP-уровне. В этом примере приложение для корреляции SOAP-сообщений использует заголовочный блокreservationТо, каким образом эта корреляция может быть реализована, зависит от конкретного приложения и не является предметом рассмотрения SOAP.

Пример 15

From: reservations@travelcompany.example.org

To: a.oyvind@mycompany.example.com

Subject: Which NY airport?

Date: Thu, 29 Nov 2001 13:35:11 EST

Message-Id: <200109251753.NAA10655@travelcompany.example.org>

In-reply-to:<EE492E16A090090276D208424960C0C@mycompany.example.com>

Content-Type: application/soap+xml

<?xml version='1.0' ?>

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">

<env:Header>

<m:reservation xmlns:m="http://travelcompany.example.org/reservation"

env:role="http://www.w3.org/2003/05/soap-envelope/role/next"

env:mustUnderstand="true">

<m:reference>uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d</reference>

<m:dateAndTime>2001-11-29T13:35:00.000-05:00</m:dateAndTime>

</m:reservation>

<n:passenger xmlns:n="http://mycompany.example.com/employees"

env:role="http://www.w3.org/2003/05/soap-envelope/role/next"

env:mustUnderstand="true">

<n:name>Еke Jуgvan Шyvind</n:name>

</n:passenger>

</env:Header>

<env:Body>

<p:itinerary

xmlns:p="http://travelcompany.example.org/reservation/travel">

<p:itineraryClarifications>

...

...

</p:itineraryClarifications>

</p:itinerary>

</env:Body>

</env:Envelope>

SOAP-сообщение из примера 2, переданное в email-сообщении с заголовком, кореллирующим его с предыдущим сообщением.