
- •Часть I………………………………………………………………. 53
- •Часть II……………………………………………………………. 59
- •Аннотация
- •Проблема в корне
- •Эволюция программных архитектур
- •«Подводные камни» soa
- •Классическое представление концепции soa
- •Верно, но рано
- •Ресурсы
- •Аннотация
- •Введение
- •Общий обзор материала
- •Основные сценарии использования
- •Раздел 2.1описывает запрос на бронирование путешествия в виде soap-сообщения, который дает возможность описать различные составляющие soap-сообщения.
- •Раздел 2.3демонстрирует примеры обработки ошибок. Soap-сообщения
- •Обмен soap-сообщениями
- •Сценарии обработки сообщений об ошибках
- •Модель обработки soap
- •Атрибут "role"
- •Атрибут "mustUnderstand"
- •Атрибут "relay"
- •Использование различных протокольных привязок
- •Http-привязка soap
- •Использование soap поверх Email
- •Более сложные сценарии использования Использование soap-посредников
- •Использование других схем написания кода
- •Различия между soap 1.1 и soap 1.2
- •Аннотация
- •Часть I Введение
- •Проектирование Web-сервисов
- •Недопустимость генерации wsdl
- •Проектирование интерфейсов
- •Непрозрачность сети
- •Отличие Web-сервисов от распределенных объектов
- •Определение ограниченных интерфейсов
- •Разнесение бизнес логики и политики
- •Разделение проектирования и реализации
- •Часть II Введение
- •Инструменты
- •Модульные описания Web-сервиса
- •Пространства имен
- •Обработка ошибок
- •Document/literal против rpc/encoded
- •Что можно ожидать
- •Аннотация
- •Введение
- •Понятие сервисно-ориентированности
- •Почему не достаточно bpm, ea и ooad
- •Oбъектно-ориентированная (оо) парадигма против сервисно-ориентированной (so)
- •Элементы soad
- •Что дает soad?
- •Первые элементы soad
- •Пример: Наряд на выполнение авторемонтных работ
- •Выводы и перспективы на будущее
Использование 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-сообщении с заголовком, кореллирующим его с предыдущим сообщением.