Клиент Web (SOAP) сервиса
«1С:Исполнитель» предоставляет возможность вызывать внешний Web (SOAP) сервис и удобно обрабатывать полученные ответы. Для этого предназначен элемент проекта Клиент Soap Сервиса:
Создание клиента SOAP-сервиса
Для реализации клиента SOAP-сервиса вам следует создать элемент проекта Клиент Soap Сервиса и определить у него следующие свойства:
- UrlПоУмолчанию — URL, по которому по умолчанию будет выполняться запрос к SOAP-сервису. Можно выполнять запросы по адресу, отличающемуся от UrlПоУмолчанию. В этом случае, при создании объекта КлиентSoapСервиса в конструктор требуется передать параметр — подготовленный КлиентHttp.
- ВерсияSoap — версия SOAP, используемая при формировании исходящих и интерпретации входящих SOAP сообщений. Поддерживаются версии SOAP 1.1 и 1.2. По-умолчанию — SOAP 1.1.
Пример:
ВидЭлемента: КлиентSoapСервиса
Ид: f65ac26f-0351-48cd-bc93-751912e05bc1
Имя: КлиентСервисаМагазина
ОбластьВидимости: ВПроекте
UrlПоУмолчанию: http://myserver:9090/applications/SOAPServis/api/service
ВерсияSoap: Soap\_1\_1
В проект необходимо загрузить WSDL-описание сервиса. Для этого в панели Свойства, в поле URL WSDL Soap-сервиса, следует указать HTTP-адрес описания сервиса (часто это адрес сервиса с дополнительным параметром ?wsdl
) и нажать кнопку Загрузить в проект. При этом будет выполнен GET-запрос по указанному адресу и полученная WSDL схема будет загружена в проект.
При загрузке будет выполнена генерация типов встроенного языка, соответствующих WSDL-описанию сервиса. В типе клиента с именем элемента проекта будут сгенерированы методы для вызова операций сервиса.
При повторной загрузке типы встроенного языка генерируются заново, и могут быть внесены несовместимые изменения, если WSDL описание сервиса изменилось.
Тип <Имя-клиента-soap-сервиса>
В среде разработки на основе WSDL, полученного от SOAP-сервиса, будет создан тип <Имя-клиента-soap-сервиса>
. Этот тип содержит методы, соответствующие операциям сервиса, и структуры для передачи параметров и возвращаемых зна чений. Имя этого типа совпадает с именем элемента проекта. Например, для клиента SOAP-сервиса с именем КлиентСервисаМагазина будет создан тип КлиентСервисаМагазина
Правила формирования имен
Имена структур данных и методов генерируются на основе описания разных секций WSDL. Если указанное в WSDL имя не является валидным идентификатором встроенного языка, то имя формируется путем замены непригодных символов на символ подчеркивание (например, «field-1» превратится в «field_1»). Уникальность имен обеспечивается добавлением в конец увеличивающегося счетчика. Если полученное имя в результате замены будет состоять только из подчеркиваний и цифр, то будет использован префикс «Structure/Структура» для структуры, «Field/Поле» — для поля структуры, «Method/Метод» — для метода сервиса, «Exception/Исключение» — для исключений, «Enum/Перечисление» — для перечислений.
Генерация типов встроенного языка на основе содержимого секции wsdl:types
Для каждого элемента, описанного в секции wsdl:types
, в типе КлиентSoapСервиса
создается структура. Имя структуры определяется по имени типа в WSDL схеме с учетом вышеуказанных ограничений. Полное имя типа структуры — <Имя-элемента>.<Имя-cтруктуры>
. Для всех элементов и атрибутов, описанных в схемах типов, генерируется поле структуры. Имя поля определяется по имени типа в схеме с учетом вышеуказанных ограничений. Тип поля определяется следующим образом:
Тип в WSDL схеме | Тип поля структуры |
---|---|
anyType / anySimpleType | Объект |
string / anyURI / QName / NOTATION / normalizedString / token / language / NMTOKEN / NMTOKENS / Name / NCName / ID / IDREF / IDREFS / ENTITY / ENTITIES | Строка |
boolean | Булево |
decimal / float / double / integer / nonPositiveInteger / negativeInteger / long / int / short / byte / nonNegativeInteger / unsignedLong / unsignedInt / unsignedShort / unsignedByte / positiveInteger | Число |
dateTime | ДатаВремя |
time | Время |
date | Дата |
duration | Длительность |
gYearMonth | Дата (в которой день всегда 1, а год и месяц заданы) |
gMonthDay | Дата (в которой год всегда текущий, а месяц и день заданы) |
gYear | Число (соответствующее году) |
gMonth | Число (соответствующее месяцу) |
gDay | Число (в диапазоне от 1 до 31) |
hexBinarybase64Binary | Байты |
simpleType | В зависимости от базового типа (см. в таблице выше) |
complexType | Структура соответствующего типа |
Также во внимание принимаются ограничения minOccurs
и maxOccurs
:
minOccurs | maxOccurs | Тип поля структуры |
---|---|---|
не задано или 1 | не задано или 1 | Тип из схемы |
0 | не задано или 1 | Тип из схемы или Неопределено |
0 | unbounded или конкретное значение больше 1 | Массив<Тип из схемы>? |
не задано или конкретное значение больше 0 | unbounded или конкретное значение больше 1 | Массив<Тип из схемы> |
Генерация типов встроенного языка на основе содержимого секций wsdl:portType
/ wsdl:operation
Для каждой операции, описанно й в секциях wsdl:portType
/ wsdl:operation
, в типе будут созданы:
- Метод
<ИмяМетодаСервиса>
с именем, сформированным по описанным выше правилам. Параметры метода создаются на основе схемы WSDL. Дополнительно добавляется параметр с именем ПараметрЗаголовков, в котором разработчик может передать дополнительные данные в методНастроитьЗаголовкиSoap<ИмяМетодаСервиса>
. - Обработчик с именем
НастроитьЗаголовкиSoap<ИмяМетодаСервиса>
функционального типа. Прикладной разработчик может определить обработчик в модуле элемента и написать в нем код формирования элементов секции Header SOAP сообщения. - Обработчик с именем
ОбработатьЗаголовкиSoap<ИмяМетодаСервиса>
функционального типа. Прикладной разработчик может определить обработчик в модуле элемента и написать в нем код чтения элементов секции Header SOAP сообщения. - Свойство с именем
ПередЗапросом<ИмяМетодаСервиса>
функционального типа. Значение свойства — метод, который позволяет настроить свойства HTTP-запроса, выполняемого к сервису при вызове метода<ИмяМетодаСервиса>
. Например, позволяет задать заголовки для неподдерживаемых способов аутентификации. В параметре обработчику передается полностью подготовленный «Исполнителем» запрос. Прикладной разработчик может настроить свойства запроса, например, определить его заголовки, но не может его выполнить. При попытке вызвать методВыполнить
выбрасывается исключение. Если установлено значениеНеопределено
, то выполняется запрос, подготовленный «1С:Исполнителем». - Для SOAP-ошибок, описанных в WSDL, генерируются:
- Исключение. Базовый тип —
ИсключениеВызоваSoapСервиса
. Имя исключения формируется из имени XML-типа ошибки с учетом правил формирования имен. - Структура с деталями ошибки. Имя структуры формируется из имени XML-типа ошибки с постфиксом Detail с учетом правил формирования имен.
- Исключение. Базовый тип —
В общем виде методы, сгенерированные по WSDL описанию, выглядят следующим образом:
// Методы-процедуры (не возвращают результат):
<ИмяМетодаПродедурыСервиса>(<параметры по WSDL>, ПараметрЗаголовков: Объект? = Неопределено): ОтветSoap
// Методы-функции (возвращают результат):
<ИмяМетодаФункцииСервиса>(<параметры по WSDL>, ПараметрЗаголовков: Объект? = Неопределено): ОтветФункцииSoap<ТипРезультата>
где ТипРезультата
— тип структуры, сгенерированной для хранения результата, возвращаемого методом-функцией SOAP-сервиса.