Информационный объект-атрибут ref и информационный объект-атрибут id не ДОЛЖНЫ появляться в одном и том же информационном элементе.
5.1.6 Информационный объект-атрибут arraySize
Информационный объект-атрибут arraySize имеет следующие свойства инфо-набора:
- [local name] arraySize;
- [namespace name] "http://www.w3.org/2003/05/soap-encoding".
Тип информационного объекта-атрибута arraySize - enc:arraySize. Значение информационного объекта-атрибута arraySize ДОЛЖНО соответствовать следующей грамматике РФБН:
[1] | arraySizeValue | ::= | ("*" | concreteSize) nextConcreteSize* |
[2] | nextConcreteSize | ::= | whitespace concreteSize |
[3] | concreteSize | ::= | [0-9] + |
[4] | whitespace | ::= | (#x20 | #x9 | #xD | #xA) + |
Атрибут arraySize передает предложенное отображение массива SOAP в многомерную структуру данных программы. Количество элементов списка arraySize представляет число размерностей, а значения - информацию о значениях соответствующих размерностей. Для кодирования SOAP многомерных массивов, узлы выбираются так, чтобы последний подстрочный индекс (т.е. подстрочный индекс, соответствующий последней указанной размерности) менялся чаще всего, а первый - реже всего. Звездочка МОЖЕТ использоваться только на месте первого измерения, чтобы показать, что число элементов в этой размерности не установлено; звездочки не ДОЛЖНЫ появляться в других позициях в списке. Значение по умолчанию информационного объекта-атрибута arraySize - это звездочка "*", т.е. единственное измерение с неуказанным числом элементов.
5.1.7 Информационный объект-атрибут nodeType
Информационный объект-атрибут nodeType имеет следующие свойства инфо-набора:
- [local name] nodeType;
- [namespace name] "http://www.w3.org/2003/05/soap-encoding";
- [specified] со значением true.
Тип информационного объекта-атрибута nodeType - enc:nodeType.
Если имеется информационный объект-атрибут nodeType, то его значение ДОЛЖНО быть одной из строк: "simple", "struct" или "array". Значение атрибута указывает на тип значения, которое представляет узел: простое значение, значение составной структуры или значение составного массива соответственно.
5.2 Декодирование отказов
Во время десериализации получатель SOAP:
- ДОЛЖЕН генерировать отказ SOAP "env:Sender" с дополнительным кодом (subcode) enc:MissinglD, если сообщение содержит информационный объект-атрибут ref, но не содержит никакого соответствующего информационного объекта-атрибута id (см. 5.1.5.3);
- ДОЛЖЕН генерировать отказ SOAP "env:Sender" с дополнительным кодом enc:DuplicatelD, если сообщение содержит два или более информационных объекта-атрибута id с одним и тем же значением (см. 5.1.5.3);
- МОЖЕТ генерировать отказ SOAP "env:Sender" с дополнительным кодом enc:UntypedValue, если свойство "имя типа" закодированного узла графа не указано.
6 Представление SOAP RPC
Одна из целей протокола SOAP состоит в том, чтобы упростить обмен сообщениями, которые легко отображаются на определения и вызовы методов и процедур в обычных языках программирования. Для этого данный раздел определяет универсальное представление запросов и ответов вызова удаленной процедуры (RPC). Данный раздел не определяет фактические привязки ни к каким определенным языкам программирования. Данное универсальное представление полностью независимо от платформы, и, благодаря значительным усилиям, SOAP стал совместимым с сетью Интернет.
Как упомянуто в разделе 4, использование и реализация представления SOAP RPC НЕ ОБЯЗАТЕЛЬНЫ.
Информационный объект-атрибут SOAP encodingStyle [ИСО/МЭК 40210, пункт 8.1.1] используется для указания стиля кодирования представления RPC. Кодирование, определенное таким образом, ДОЛЖНО поддерживать требования, изложенные в разделе 4. Стиль кодирования, определенный в разделе 5, поддерживает такие конструкции и поэтому подходит для использования в представлении SOAP RPC.
Представление SOAP RPC не основывается ни на каких привязках протокола SOAP. Когда используется привязка SOAP к HTTP, вызов RPC легко отображается на запрос HTTP, и ответ RPC отображается на ответ HTTP (см. раздел 9). Однако, представление SOAP RPC не ограничено привязкой SOAP к HTTP.
Чтобы вызвать RPC, необходима следующая информация:
- адрес целевого узла SOAP;
- имя процедуры или имя метода;
- идентификационные данные и значения любых параметров, которые должны быть переданы процедуре или методу. Параметрам, используемым для идентификации Веб-ресурсов, СЛЕДУЕТ отличаться от параметров, представляющих данные или управляющую информацию (см. 6.1.1);
- значения для свойств, требуемых используемой привязкой. Например, "GET" или "POST" для свойства "http://www.w3.org/2003/05/soap/features/web-method/Method" (см. 8.4);
- дополнительные данные заголовка.
SOAP RPC использует привязку протокола для обеспечения механизма переноса URI целевого узла SOAP. Для HTTP протокола URI запроса указывает на ресурс, к которому обращен вызов. Кроме требования на правильность URI, SOAP не устанавливает ограничений на форму идентификатора (см. RFC 3986 [RFC 3986] для получения дополнительной информации по URI). В 6.1.1 далее обсуждается использование URI для идентификации ресурсов RPC.
Представление SOAP RPC использует шаблоны обмена сообщениями "запрос-ответ" и "ответ SOAP" (см. 8.2 и 8.3). Представление SOAP RPC МОЖЕТ использоваться с другими шаблонами обмена сообщениями, но это выходит за рамки данной спецификации.
6.1 Использование RPC в сети Интернет
СЛЕДУЕТ руководствоваться нижеизложенными принципами при развертывании приложений SOAP RPC в сети Интернет.
6.1.1 Идентификация ресурсов RPC
В сети Интернет ресурсы идентифицируются с помощью URI, но, согласно общим соглашениям в программировании, идентификационная информация передается процедурам в параметрах или в именах самих процедур. Например, вызов:
updateQuantitylnStock (PartNumber="123", NewQuantity="200")
предполагает, что ресурсом, который будет обновлен, является QuantitylnStock для значения параметра PartNumber, равного "123". Соответственно, при сопоставлении с методом или процедурой некоторого языка программирования любые фактические параметры, которые служат для идентификации ресурсов (как номер детали PartNumber в примере выше) должны, когда это целесообразно, быть представлены в URI, к которому адресованы сообщения SOAP. Если имя метода или процедуры идентифицирует или уточняет идентификацию ресурса (как QuantitylnStock в примере выше), то при сопоставлении с методом или процедурой некоторого языка программирования такое именование или уточнение должно быть представлено, когда это целесообразно, в URI, к которому адресовано сообщение SOAP. Данная спецификация не определяет никаких стандартных средств представления параметров или имен методов.
Примечание - Соглашения для специфического URI-кодирования имен процедур и параметров, а также для управления включением таких параметров в тело SOAP RPC могут быть установлены совместно с разработкой языков описания интерфейсов Веб-службы. Они могут быть разработаны, если SOAP привязан к определенным языкам программирования, или могут быть установлены на базе конкретных приложений или процедур.
6.1.2 Отличие получения ресурсов от других RPC
Всемирная паутина зависит от механизмов, которые оптимизируют часто выполняемые задачи информационного поиска. В частности протоколы, такие как HTTP [RFC 2616], предоставляют метод "GET", который используется для безопасного извлечения информации. Это такое извлечение информации, которое не изменяет данные, не имеет побочных эффектов и которому из соображений безопасности, не запрещено использовать кэшированные результаты или идентификацию, основанную на URI.
Определенные процедуры или вызовы методов представляют собой запросы на получение информации. Например, вызов:
getQuantitylnStock (PartNumber="123")
мог бы использоваться для получения количества, установленного в примере выше.
Следующие соглашения могут использоваться для реализации вызовов SOAP и других вызовов RPC в сети Интернет:
- соглашения, описанные в 6.1.1, используются для идентификации ресурсов по URI;
- в случаях, когда все параметры представлены в URI, никакие блоки заголовка SOAP не передаются, и операция извлечения информации является безопасной, используются функция "Веб-метод" (см. 8.4) и шаблон обмена сообщениями "ответ SOAP" (см. 8.3). Соответственно, никакой конверт SOAP не передается для запроса, и значение свойства http://www.w3.org/2003/05/soap/features/web-method/Method устанавливается в значение "GET". Результатом извлечения информации является ответ SOAP RPC, описанный в 6.2.2;
- в случаях, когда выполняемая операция не является извлечением информации, когда должны быть переданы блоки заголовка SOAP (например, в случае цифровой подписи) или когда извлечение информации не является безопасным, используются функция "Веб-метод" (см. 8.4) и шаблон обмена сообщениями "запрос-ответ" (см. 8.2). Конверт запроса кодируется, как описано в 6.2.1, а результаты извлечения информации описаны в 6.2.2.
Свойство http://www.w3.org/2003/05/soap/features/web-method/Method устанавливается в значение "POST".