Как получить данные из WS-сервиса в 1С по аналогии с SoapUI?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Однако при переносе этой логики в 1С начинающие разработчики часто совершают ошибку: создают объект прокси и пытаются прочитать данные из его свойств (например, через Прокси.Endpoint или Proxy.Endpoint). В результате в отладчике отображается метаинформация о точке подключения, а сами данные от веб-сервиса не поступают. Проанализируем причину такого поведения и разберем, как правильно выполнять вызовы WS-сервисов в 1С.

Выясняем причину: в чем разница между SoapUI и WSПрокси в 1С

В SoapUI нажатие на зеленую кнопку запуска выполняет сразу два действия: автоматически формирует SOAP-конверт и отправляет HTTP-запрос на конечную точку (endpoint) веб-сервиса, после чего принимает входящий ответ.

В платформе 1С объект WSПрокси служит лишь промежуточным звеном (клиентским шлюзом). Обращение к свойству Прокси.Endpoint всего лишь возвращает описательную информацию о точке подключения к сервису (URI, имя порта и т. д.), но не выполняет сам сетевой запрос.

Чтобы платформа 1С отправляла SOAP-запрос к конечной точке и возвращала значение, необходимо вызвать конкретный метод веб-сервиса, определенный в WSDL-схеме.

Разбираем по шагам: как правильно вызвать метод веб-сервиса в 1С

Рассмотрим правильный алгоритм работы с веб-сервисом на платформе 1С с использованием динамического связывания через WSОпределения и WSПрокси.

  1. Загружаем WSDL-описание сервиса: создаем объект WSОпределения, передавая URL-адрес WSDL-файла.
  2. Определяем сервис и точку подключения: выбираем из коллекции требуемый сервис и endpoint.
  3. Создаем прокси-объект: инициализируем WSПрокси на основе полученных определений.
  4. Вызываем метод сервиса: обращаемся к методу прокси по его имени (так же, как имя операции называется в SoapUI).

Рассмотрим пример кода на русском языке платформы 1С:


АдресWSDL = "http://1.1.1.1/shef/ws/getcart?wsdl";

// Step 1: Получаем определения сервиса
Определения = Новый WSОпределения(АдресWSDL);

// Step 2: Выбираем сервис и точку подключения (endpoint)
Сервис = Определения.Сервисы[0];
ТочкаПодключения = Сервис.ТочкиПодключения[0];

// Step 3: Создаем прокси
Прокси = Новый WSПрокси(Определения, Сервис.Имя, ТочкаПодключения.Имя, ТочкаПодключения.Имя);

// Step 4: Вызываем метод веб-сервиса (в данном примере метод называется getcart)
Результат = Прокси.getcart();

Если в вашем проекте используются англоязычные синонимы методов платформы, аналогичный код выглядит следующим образом:


FileName_wsdl = "http://1.1.1.1/shef/ws/getcart?wsdl";
DefnT = New WSDefinitions(FileName_wsdl);
WSSrv = DefnT.Services[0];

Proxy = New WSProxy(DefnT, WSSrv.Name, WSSrv.Endpoints[0].Name, WSSrv.Endpoints[0].Name);

// Обращение к методу сервиса возвращает требуемые данные
Dann = Proxy.getcart();

Способы подключения: динамический и статический

В 1С есть два основных способа работы с SOAP-сервисами:

  1. Динамическое создание через WSОпределения: WSDL запрашивается с сервера во время выполнения кода. Это наиболее гибкий подход, так как изменения на стороне сервиса подтягиваются автоматически.
  2. Статическая WS-ссылка: WSDL-схема импортируется в конфигуратор в ветку дерева метаданных «WS-ссылки». При таком подходе прокси создается через вызoв метода СоздатьWSПрокси() объекта WS-ссылки.

Важные технические нюансы при работе с WSПрокси

Если при вызове метода веб-сервиса вы сталкиваетесь с ошибками или отсутствием ответа, проверьте следующие параметры:

1. Передача параметров и типов XDTO
Если метод веб-сервиса принимает параметры, их необходимо передавать в скобках при вызове функции: Прокси.ИмяМетода(Параметр1, Параметр2). Если сервис требует сложные структуры данных, их нужно создавать с помощью фабрики XDTO: Прокси.ФабрикаXDTO.Создать(...).

2. Авторизация и защищенное соединение (HTTPS)
В SoapUI параметры авторизации могут подставляться автоматически. В 1С при работе по протоколу HTTPS нужно обязательно указывать защищенное соединение при создании WSОпределения:


ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Определения = Новый WSОпределения(АдресWSDL, Пользователь, Пароль, , , ЗащищенноеСоединение);

3. Прямой HTTP-запрос как альтернатива WSПрокси
Платформа 1С строго проверяет входящий XML-ответ на соответствие XSD-схеме из WSDL. Если сторонний сервис возвращает XML с отступлениями от схемы, WSПрокси вызовет ошибку валидации XDTO. В таких случаях можно скопировать SOAP-конверт из SoapUI и отправить его напрямую через объекты HTTPСоединение и HTTPЗапрос, установив заголовок Content-Type: text/xml; charset=utf-8.

← На главную