ГОСТ Р ИСО/МЭК 40220-2015. Национальный стандарт Российской Федерации. Информационные технологии. W3C SOAP. Версия 1.2. Часть 2. Дополнения (вторая редакция)
8.3. Шаблон обмена сообщениями SOAP "ответ SOAP"
Данный раздел определяет шаблон обмена сообщениями (ШОС) "ответ SOAP". В нем описывается абстрактное представление работы данного ШОС. Данный раздел не предназначен для описания реальной реализации или для предложений, как должна быть структурирована реальная реализация.
8.3.1. Имя функции SOAP
Идентификатор данного шаблона обмена сообщениями: URI [ИСО/МЭК 40210, подраздел 5.6] "http://www.w3.org/2003/05/soap/mep/soap-response/".
8.3.2. Описание
ШОС "ответ SOAP" определяет шаблон обмена сообщениями, в котором за сообщением, которое не является сообщением SOAP, но выступает в роли запроса, следует сообщение SOAP, выступающее в роли ответа. При условии, что нет отказа нижележащего протокола, данный ШОС состоит ровно из двух сообщений, причем только одно из них является сообщением SOAP:
- запрос передается методом, определенным привязкой, который не включает конверт SOAP, и, следовательно, не требует SOAP-обработки получающим узлом SOAP;
- сообщение ответа, которое содержит конверт SOAP. ШОС завершается обработкой конверта SOAP в соответствии с правилами модели обработки SOAP (см. [ИСО/МЭК 40210, раздел 5]).
Аварийная работа во время обмена сообщениями "ответ SOAP" может быть вызвана отказом при передаче сообщения запроса или ответа. Информирование о таких отказах может быть опущено на одном или обоих запрашивающем и отвечающем узлах SOAP или может быть осуществлено с помощью генерации отказа SOAP или отказа, определенного привязкой (см. 8.3.4). Кроме того, во время аварийной работы каждый узел SOAP, участвующий в обмене сообщениями, может по-разному определять успешность выполнения операции обмена сообщениями.
Область применения ШОС "ответ SOAP" ограничивается запросом на сообщение-ответ при обмене сообщениями между одним запрашивающим и одним отвечающим узлами SOAP. Данный шаблон не налагает требований ни на корреляции между множественными запросами, ни на определенную синхронизацию множественных запросов. Реализации МОГУТ поддерживать одновременно несколько запросов и связанную с ними обработку ответов.
Примечание - Данный ШОС не может использоваться в сочетании с функциями, которые задаются в блоках заголовка SOAP в запросе, потому что в данном случае нет конверта SOAP, в который можно было бы их включить.
8.3.3. Описание конечного автомата
ШОС "ответ SOAP" определяет ряд свойств, описанных в таблице 8.
Таблица 8
Определения свойств для ШОС "ответ SOAP"
Имя свойства | Описание свойства | Тип свойства |
http://www.w3.org/2003/05/soap/mep/OutboundMessage | Абстрактная структура, представляющая текущее исходящее сообщение в обмене сообщениями. Данная структура абстрагирует и инфо-набор конверта SOAP (который МОЖЕТ отсутствовать), и любые другие информационные структуры, передающиеся вместе с конвертом | Не задан |
http://www.w3.org/2003/05/soap/mep/InboundMessage | Абстрактная структура, представляющая текущее входящее сообщение в обмене сообщениями. Данная структура абстрагирует и инфо-набор конверта SOAP (который МОЖЕТ отсутствовать), и любые другие информационные структуры, передающиеся вместе с конвертом | Не задан |
http://www.w3.org/2003/05/soap/mep/ImmediateDestination | Идентификатор непосредственного узла назначения исходящего сообщения | xs:anyURI |
http://www.w3.org/2003/05/soap/mep/ImmediateSender | Идентификатор непосредственного отправителя входящего сообщения | xs:anyURI |
Чтобы инициировать обмен сообщениями, который соответствует ШОС "ответ SOAP", запрашивающий узел SOAP создает экземпляр локального контекста обмена сообщениями. В таблице 9 описано, как инициализируется контекст.
Таблица 9
Создание экземпляра контекста обмена сообщениями
для запрашивающего узла SOAP
Имя свойства: http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/ExchangePatternName. Значение: http://www.w3.org/2003/05/soap/mep/soap-response/. |
Окончание таблицы 9 |
Имя свойства: http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/FailureReason. Значение: "None". Примечания: относительный URI, который будет разрешен относительно значения свойства с именем http://www.w3.org/2002/12/soap/bindingFramework/ExchangeContext/ExchangePatternName |
Имя свойства: http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/Role. Значение: "RequestingSOAPNode". Примечания: относительный URI, который будет разрешен относительно значения свойства с именем http://www.w3.org/2002/12/soap/bindingFramework/ExchangeContext/ExchangePatternName |
Имя свойства: http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/State. Значение: "Init". Примечания: относительный URI, базовый URI которого - значение свойства с именем http://www.w3.org/2002/12/soap/bindingFramework/ExchangeContext/Role |
Имя свойства: http://www.w3.org/2003/05/soap/mep/OutboundMessage. Значение: абстракция сообщения запроса, которое не включает инфо-набор конверта SOAP |
Имя свойства: http://www.w3.org/2003/05/soap/mep/ImmediateDestination. Значение: идентификатор (URI), который обозначает отвечающий узел SOAP |
Могут присутствовать и другие свойства, имеющие отношения к операциям экземпляра контекста обмена сообщениями. Такие свойства инициализируются согласно их собственным спецификациям.
Как только контекст обмена сообщениями инициализирован, управление контекстом передается к соответствующему локальному экземпляру привязки.
На рисунке 3 представлены логические переходы между состояниями запрашивающего и отвечающего узлов SOAP во время обмена сообщениями. В каждом узле SOAP локальные экземпляры привязки логически обновляют значение свойства http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/State для отражения текущего состояния процесса обмена сообщениями. Имена состояний - относительные URI, заданные относительно значения базового URI, которое содержится в свойстве http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/Role локального контекста обмена сообщениями.
Рисунок 3 - Диаграмма переходов ШОС "ответ SOAP"
Когда локальный экземпляр привязки в отвечающем узле SOAP начинает получать входящее сообщение запроса, он логически создает экземпляр контекст обмена сообщениями. В таблице 10 описаны свойства, которые привязка инициализирует как часть создания экземпляра контекста.
Таблица 10
Создание экземпляра контекста обмена сообщениями
для входящего сообщения-запроса
Имя свойства: http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/ExchangePatternName. Значение: http://www.w3.org/2003/05/soap/mep/soap-response/. Примечания: инициализируется как можно раньше в жизненном цикле обмена сообщениями |
Имя свойства: http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/FailureReason. Значение: "None". Примечания: относительный URI, который будет разрешен относительно значения свойства с именем http://www.w3.org/2002/12/soap/bindingFramework/ExchangeContext/ExchangePatternName |
Имя свойства: http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/Role. Значение: "RespondingSOAPNode". Примечания: относительный URI, который будет разрешен относительно значения свойства с именем http://www.w3.org/2002/12/soap/bindingFramework/ExchangeContext/ExchangePatternName, инициализируется во время жизненного цикла обмена сообщениями как можно раньше |
Имя свойства: http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/State. Значение: "Init". Примечания: относительный URI, который будет разрешен относительно значения свойства с именем http://www.w3.org/2002/12/soap/bindingFramework/ExchangeContext/Role |
Когда происходит переход между состояниями запрашивающего и отвечающего узлов SOAP, локальный экземпляр привязки логически обновляет отдельные свойства. В таблицах 11 и 12 описаны эти обновления для запрашивающих и отвечающих узлов SOAP.
Таблица 11
Переходы запрашивающего узла SOAP
Текущее состояние |
|
Init Инициализация | Условие перехода: безусловный переход. Следующее состояние: "Requesting". Действие: инициировать запрос |
Requesting Запрос | Условие перехода: отказ при передаче сообщения. Следующее состояние: "Fail". Действие: установить http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/FailureReason в "transmissionFailure" |
Условие перехода: начато получение сообщения ответа. Следующее состояние: "Receiving". Действие: установить значение http://www.w3.org/2003/05/soap/mep/ImmediateSender, для обозначения отправителя сообщения ответа (может отличаться от значений в http://www.w3.org/2003/05/soap/mep/ImmediateDestination). Начать конструировать абстрактное сообщение ответа в http://www.w3.org/2003/05/soap/mep/InboundMessage | |
Receiving Получение | Условие перехода: отказ при обмене сообщениями. Следующее состояние: "Fail". Действие: установить значение http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/FailureReason в "exchangeFailure". |
Условие перехода: завершено получение сообщения ответа. Следующее состояние: "Success" |
Таблица 12
Переходы отвечающего узла SOAP
Текущее состояние |
|
Init Инициализация | Условие перехода: начато получение запроса. Следующее состояние: "Receiving". Действие: установить значение переменной http://www.w3.org/2003/05/soap/mep/ImmediateSender для обозначения отправителя сообщения запроса (если его можно определить). Передать управление контекстом обмена сообщениями процессору SOAP |
Receiving Получение | Условие перехода: отказ при приеме сообщения. Следующее состояние: "Fail". Действие: установить значение переменной http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/FailureReason в "receptionFailure" |
Условие перехода: начало сообщения ответа доступно в http://www.w3.org/2003/05/soap/mep/OutboundMessage. Следующее состояние: "Sending". Действие: инициировать передачу абстрактного сообщения ответа, содержащегося в http://www.w3.org/2003/05/soap/mep/OutboundMessage | |
Sending Отправка | Условие перехода: отказ при передаче сообщения. Следующее состояние: "Fail". Действие: установить http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/FailureReason в "exchangeFailure" |
Условие перехода: отправка сообщения ответа завершена. Следующее состояние: "Success" |
8.3.4. Обработка отказов
Во время работы ШОС "ответ SOAP" участвующие узлы SOAP могут генерировать отказы SOAP.
Если отказ SOAP сгенерирован отвечающим узлом SOAP, находящимся в состоянии "Получение", то отказ SOAP сохраняется в http://www.w3.org/2003/05/soap/mep/OutboundMessage, и конечный автомат переходит в состояние "Отправка".
Данный ШОС не специфицирует порождение или обработку отказов SOAP, сгенерированных запрашивающим узлом SOAP во время обработки сообщения ответа в состояниях, следующих за состоянием "Успех" в таблице переходов запрашивающего узла SOAP (см. таблицу 11).
