При тестировании веб-сервисов в программе SoapUI процесс выглядит очень просто: мы загружаем WSDL-описание, открываем проект, выбираем нужный элемент запроса и нажимаем кнопку запуска (зеленый треугольник). Тестировщик или разработчик сразу получает ответ от сервиса в соседнем окне.
Однако при переносе этой логики в 1С начинающие разработчики часто совершают ошибку: создают объект прокси и пытаются прочитать данные из его свойств (например, через Прокси.Endpoint или Proxy.Endpoint). В результате в отладчике отображается метаинформация о точке подключения, а сами данные от веб-сервиса не поступают. Проанализируем причину такого поведения и разберем, как правильно выполнять вызовы WS-сервисов в 1С.
В SoapUI нажатие на зеленую кнопку запуска выполняет сразу два действия: автоматически формирует SOAP-конверт и отправляет HTTP-запрос на конечную точку (endpoint) веб-сервиса, после чего принимает входящий ответ.
В платформе 1С объект WSПрокси служит лишь промежуточным звеном (клиентским шлюзом). Обращение к свойству Прокси.Endpoint всего лишь возвращает описательную информацию о точке подключения к сервису (URI, имя порта и т. д.), но не выполняет сам сетевой запрос.
Чтобы платформа 1С отправляла SOAP-запрос к конечной точке и возвращала значение, необходимо вызвать конкретный метод веб-сервиса, определенный в WSDL-схеме.
Рассмотрим правильный алгоритм работы с веб-сервисом на платформе 1С с использованием динамического связывания через WSОпределения и WSПрокси.
WSОпределения, передавая URL-адрес WSDL-файла.WSПрокси на основе полученных определений.Рассмотрим пример кода на русском языке платформы 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-сервисами:
WSОпределения: WSDL запрашивается с сервера во время выполнения кода. Это наиболее гибкий подход, так как изменения на стороне сервиса подтягиваются автоматически.Создать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.