Заголовки сообщений SOAP

Как мы уже знаем, заголовок является необязательной частью SOAP- сообщения. Однако эта часть сообщения позволяет несколько расширять стандартную функциональность SOAP. Необходимо помнить, что любой элемент заголовка должен быть описан со ссылкой на пространство имен, в котором данный элемент объявляется. Так, если мы хотим использовать в заголовке некий элемент, в котором мы бы передавали, скажем, номер тран­закции, то заголовок может выглядеть следующим образом:

<SOAP-ENV:Header>

<trans:Transaction

xmlns:trans="http://www.myhost.com/namespaces/myspace/"

SOAP-ENV:mustunderstand="1">

</trans:Transaction>

</SOAP-ENV:Header>

В этом маленьком примере мы объявили элемент заголовка с наименованием Transaction. При этом пространство имен, в котором описан данный элемент, находится по адресу httр://www.myhost.com/namespaces/myspacе/. Значение элемента Transaction в данном случае равно двенадцати. Также данный элемент обладает атрибутом mustunderstand с единичным значением. Об этом атрибуте следует поговорить несколько подробнее.

Когда отправитель SОАР-сообщения его передает, он предполагает, что получатель сообщения будет иметь некоторое представление о структуре сообщения. Так, если функционирует связка из двух приложений, разработанных специально друг для друга, то разработчик, естественно, заложит в них обработку неких элементов заголовка. При этом и получатель, и отправитель знают наименования элементов заголовка, и. соответственно, будут их искать и создавать. Так вот, для тех элементов заголовка, которые получатель должен понимать, устанавливается атрибут mustunderstand с приписанным ему, как в нашем примере, единичным значением.

Подобный атрибут может принимать всего два значения — единичное и нулевое. Атрибут mustunderstand с нулевым значением эквивалентен отсутствию этого атрибута.

Если обрабатывающее приложение не в состоянии правильно распознать элемент заголовка с атрибутом mustunderstand, оно обязано вернуть SOAP- сообщение с указанием кода возникшей ошибки. Точно так же ему следует поступить, если значение этого атрибута будет отличаться от нуля или единицы.

Помимо атрибута mustunderstand, у элементов заголовка SOAP-сообщения может быть атрибут actor. Как говорилось несколько ранее, одно и то же сообщение иногда попадает на обработку в несколько приложений. При этом оно передается между ними по цепочке, т. е. приложение, обработавшее сообщение, передает его следующему получателю. При этом в заголовке сообщения могут находиться элементы, предназначенные для разных приложений. И далеко не факт, что элементы, помеченные как mustunderstand, будут "понятны" каждому приложению в цепочке. Приложения потому и разные, что у каждого своя функциональность, и для каждого есть свой набор элементов, которые они обязаны "понимать". Поэтому необходимо каким-либо образом указывать, для какого именно приложения предназначен тот или иной элемент. Именно для этой цели и существует атрибут асtor.

Каждому приложению, обрабатывающему SOAP-сообщение, придается определенный уникальный идентификатор. И тогда в качестве значения ат­рибута actor некоего элемента используется идентификатор именно того приложения, которое должно обрабатывать данный элемент. Так как каждое приложение знает собственный идентификатор, выделение именно тех эле­ментов заголовка, которые ему нужны, становится тривиальной задачей.

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

Следует также отметить, что в качестве значения данного атрибута можно использовать идентификатор http://schemas.xmlsoap.org/soap/actor/next, который указывает, что сообщение должно быть передано первому приложе­нию из списка получателей. Если же атрибут actor вообще не применялся в объявлении элементов заголовка SOAP-сообщения, это означает, что у дан­ного SOAP-сообщения есть только один получатель.

Теперь, после того, как мы рассмотрели правила, по которым составляется заголовок SOAP-сообщения, перейдем к рассмотрению структуры тела SOAP-сообщения.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: