Содержание:
2. Имя клиента сервиса 1С SOAP
3. Создание типов встроенного языка 1С
4. Обращение к операциям сервиса SOAP
5. Клиент сервиса SOAP 1С
Механизм Web (SOAP) сервисов в системе 1С: Шина представляет собой инструмент для реализации сервисно-ориентированной архитектуры.
Сервисно-ориентированная архитектура – это концепция разработки приложений, в которой функциональность представляется в виде независимых сервисов с вызываемыми интерфейсами. Взаимодействие с этими сервисами в определенной последовательности позволяет достичь более сложной бизнес-логики и реализовать различные бизнес-процессы.
SOAP-сервисы позволяют системе 1С: Шина обрабатывать входящие SOAP-запросы от информационных систем извне. Обращение к SOAP-сервису происходит при помощи HTTP POST-запроса по конкретному URL-адресу. А SOAP-сообщение передаётся внутри тела запроса.
При разработке интеграционной системы 1С: Шина также можно использовать SOAP-сервис для обработки SOAP-сообщений.
Для реализации функциональности SOAP-сервиса в 1С: Шина используется элемент проекта под названием «SOAP Сервис». Этот элемент проекта позволяет определить логику обработки SOAP-сообщений в рамках системы 1С: Шина и настроить необходимые взаимодействия с другими системами.
1. Клиент Web SOAP сервиса
Система 1С: Шина даёт возможность вызывать Web SOAP сервис извне и удобно обрабатывать полученные ответы. Для этого существует элемент проекта «Клиент Soap Сервиса», который отображён на скриншоте ниже:
Клиент Soap Сервиса
Для создания клиента SOAP-сервиса следует создать элемент проекта «Клиент Soap Сервиса» и выбрать у него следующие свойства:
- Свойство «UrlПоУмолчанию» — URL, по которому по умолчанию будет выполняться запрос к SOAP-сервису;
- Свойство «ВерсияSoap» — версия SOAP, используемая при формировании исходящих и интерпретации входящих SOAP сообщений.
Например, программный код по выбору свойств будет выглядеть так:
Видэлемента: КлиентSoapCервиса
Ид: f65ac26f-0351-48cd-bc93-751912e05bc1
Имя: КлиентСервисаМагазина
ОбластьВидимости: ВПроекте
UrlПоУмолчанию: http://myserver:9090/applications/S0APservis/api/service
ВерсияSoap: Soap_1_1
В проект необходимо загрузить WSDL-описание сервиса: открываем панель «Свойства», где в поле «URL WSDL Soap-сервиса», указываем HTTP-адрес описания сервиса и кликаем по кнопке «Загрузить в проект», как в примере далее:
Загрузить в проект
При загрузке будет выполнена генерация типов встроенного языка, соответствующих WSDL-описанию сервиса. В типе клиента с именем элемента проекта будут сгенерированы методы для вызова операций сервиса.
2. Имя клиента сервиса 1С SOAP
В среде разработки на основе WSDL, полученного от SOAP-сервиса, будет создан тип «<Имя-клиента-soap-сервиса>». Этот тип содержит методы, которые соответствуют операциям сервиса, и структуры для передачи параметров, и возвращаемых значений. Имя этого типа совпадает с именем элемента проекта.
Имена структур данных и методов генерируются на основе описания разных секций WSDL по определённым правилам. Если указанное в WSDL имя не является валидным идентификатором встроенного языка 1С, то имя формируется путём замены непригодных символов на символ подчёркивание. Уникальность имён обеспечивается добавлением в конец увеличивающегося счётчика. Если полученное имя в результате замены будет состоять только из подчеркиваний и цифр, то будет использован префикс в 1С «Structure/Структура» для структуры, «Field/Поле» — для поля структуры, «Method/Метод» — для метода сервиса, «Exception/Исключение» — для исключений, «Enum/Перечисление» — для перечислений.
3. Создание типов встроенного языка 1С
Для каждого элемента, описанного в секции
в типе «КлиентSoapСервиса» создаётся структура. Имя структуры определяется через имя типа в WSDL схеме с учётом вышеуказанных ограничений. Полное имя типа структуры — «<Имя-элемента>.<Имя-cтруктуры>». Для всех элементов и атрибутов, описанных в схемах типов, генерируется поле структуры. Имя поля определяется по имени типа в схеме с учётом вышеуказанных ограничений. Тип поля определяется следующим образом, как отображено в таблице с типами ниже:
Помимо этого, есть ещё два вида ограничений, которые можно наблюдать в таблице, приведённой ниже:
Для каждой операции, описанной в секциях
в типе будет создано следующее:
• Метод «<ИмяМетодаСервиса>» с именем, сформированным по описанным выше правилам. Параметры метода создаются на основе схемы WSDL;
• Обработчик с именем «НастроитьЗаголовкиSoap<ИмяМетодаСервиса>» функционального типа;
• Обработчик с именем «ОбработатьЗаголовкиSoap<ИмяМетодаСервиса>» функционального типа;
• Свойство с именем «ПередЗапросом<ИмяМетодаСервиса>» функционального типа. Значение свойства — метод, который позволяет настроить свойства HTTP-запроса, выполняемого к сервису при вызове метода «<ИмяМетодаСервиса>»;
• Для SOAP-ошибок, описанных в WSDL, генерируются:
1. Исключение. Базовый тип — «ИсключениеВызоваSoapСервиса»;
2. Структура с деталями ошибки. Имя структуры формируется из имени XML-типа ошибки с постфиксом Detail с учетом правил формирования имён.
В общем виде методы, сгенерированные по WSDL описанию, выглядят так, как демонстрируется на примерах ниже:
Здесь «ТипРезультата» — тип структуры, сгенерированной для хранения результата, возвращаемого методом-функцией SOAP-сервиса.
4. Обращение к операциям сервиса SOAP
Чтобы вызвать какую-либо операцию сервиса, следует создать экземпляр типа «<Имя-клиента-soap-сервиса>». Он создаётся через такую строку:
В виде параметра конструктору передаётся значение типа «КлиентHttp». В него можно передать все необходимые настройки для выполнения HTTP-запроса 1С, как вариант, следующие настройки:
Если значение параметра «Неопределено», то используется значение типа «КлиентHttp» с настройками по умолчанию, к примеру, следующим образом:
Вызвать операцию SOAP-сервиса можно следующим образом:
Если операция возвращает какие-либо значения, можно получить результат вызова операции так:
Если для операции в сервисе реализована проверка доступа через WSS-токен «UsernameToken», тогда для вызова операции клиенту требуется передать сервису SOAP-заголовок с именем пользователя и паролем. Это можно сделать в обработчике «НастроитьЗаголовкиSoap<ИмяМетодаСервиса>».
При вызове метода, соответствующего операции внешнего SOAP-сервиса, происходит следующее:
1. Переданные в метод значения параметров сериализуются, после чего формируется секция «Body» SOAP сообщения;
2. При наличии, вызывается обработчик «НастроитьЗаголовкиSoap<ИмяМетодаСервиса>». Формируется секция «Headers «SOAP сообщения;
3. Сформированное SOAP сообщение помещается в тело HTTP запроса 1С;
4. При наличии, вызывается обработчик «ПередЗапросом<ИмяМетодаСервиса>», которому передаётся подготовленный HTTP запрос 1С;
5. Выполняется HTTP запрос, и происходит синхронный вызов метода SOAP-сервиса;
6. При наличии, вызывается обработчик «ОбработатьЗаголовкиSoap<ИмяМетодаСервиса>». Он возвращает значение, которое будет записано в свойство «Заголовки» результата типа «ОтветSoap»;
7. В зависимости от кода возврата и наличия в ответе секции «Fault», в вызывающий код возвращается результат или выбрасывает исключение. При наличии в SOAP-ответе секции «Fault» выбрасывается исключение «ИсключениеВызоваSoapСервиса». В ином случае выбрасывается «ИсключениеHttp».
5. Клиент сервиса SOAP 1С
В проекте модуль, расширяющий тип «<Имя-клиента-soap-сервиса>», называется модулем клиента SOAP-сервиса. Он исполняется на сервере и выглядит так, как показано на скриншоте ниже:
Модуль клиента SOAP-сервиса
Дополнительно для каждой операции сервиса в модуле клиента SOAP-сервиса можно создать:
• Обработчик записи заголовка SOAP-сообщения.
Это опциональный обработчик для настройки элемента «Header» исходящего SOAP-сообщения для клиента сервиса версии SOAP 1С. В качестве параметров получает значения, переданные при вызове метода «<ИмяМетодаСервиса>». Данный обработчик вызывается автоматически перед выполнением запроса к SOAP сервису. В теле метода можно вызывать метод «ЗаписьSoap_1_1(2).СоздатьЗаголовок» таким образом:
• Обработчик чтения заголовка SOAP-сообщения.
Это опциональный обработчик для чтения заголовков ответа SOAP-сервиса в виде XML. Вызывается платформой при получении ответа от SOAP-сервиса. Элемент «Header» ответа сервиса передаётся в метод через параметр «Заголовок», это происходит так, как демонстрируется в примере программного кода ниже:
Специалист компании ООО "Кодерлайн"
Лев Туренко