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

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

При разработке и тестировании веб-сервисов в среде 1С:Предприятие часто возникает задача проверить работоспособность методов сервиса непосредственно из той же информационной базы, где он был создан. Рассмотрим подробно, как это реализовать, какие инструменты использовать и на какие подводные камни можно наткнуться. При необходимости можно воспользоваться обработкой для тестирования веб-сервисов внутри 1С.

Основы работы с веб-сервисами в 1С

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

Важно помнить, что механизм WSОпределения работает исключительно через сетевые протоколы. Это означает, что вы не можете просто «вызвать метод из памяти» — веб-сервис обязательно должен быть опубликован на веб-сервере (например, IIS или Apache), даже если вы вызываете его из той же самой базы, в которой он разработан.

Пошаговое решение: программный вызов

Если вы столкнулись с ошибкой «Каталог не обнаружен» или «При создании описания сервиса произошла ошибка», вероятнее всего, проблема кроется в некорректно заданном URL в конструкторе WSОпределения. Давайте разберем правильный подход к коду.

Для начала убедитесь, что сервис опубликован, и проверьте адрес WSDL в браузере. Обычно он выглядит так: http://localhost/ИмяПубликации/ws/ИмяСервиса?wsdl. Если адрес открывается в браузере, значит, сервис доступен.

Теперь рассмотрим пример корректного программного вызова:


// Определяем параметры подключения
// URL должен указывать на WSDL вашего веб-сервиса
АдресWSDL = \"http://localhost/BaseName/ws/MyService?wsdl\";
Логин = \"Администратор\";
Пароль = \"12345\";

// Создаем описание сервиса
Определения = Новый WSОпределения(АдресWSDL, Логин, Пароль);

// Создаем прокси-объект для доступа к методам
// Параметры: (Описание, URI_пространства_имен, Имя_сервиса, Имя_порта)
Прокси = Новый WSПрокси(Определения, \"http://my-namespace\", \"MyService\", \"MyServiceSoap\");

// Устанавливаем учетные данные для вызова, если сервис защищен
Прокси.Пользователь = Логин;
Прокси.Пароль = Пароль;

// Вызываем метод сервиса
Результат = Прокси.GetConfigurationInfo();

Почему возникают ошибки и как их избежать?

  1. Неверный WSDL: Если в конструктор WSОпределения передаются пустые строки, платформа не может найти описание сервиса. Всегда указывайте полный URL с суффиксом ?wsdl.
  2. Авторизация: Помните, что вызов веб-сервиса через веб-сервер создает новый сеанс. Убедитесь, что у пользователя, под которым вы выполняете запрос, есть права на исполнение кода веб-сервиса.
  3. Статические ссылки: Если вы хотите упростить разработку, вместо динамического формирования WSОпределения, вы можете добавить в конфигуратор объект WS-ссылка. Это позволит использовать системный метод СоздатьWSПрокси(), который работает быстрее и надежнее, так как все типы данных уже закэшированы в конфигурации.

Инструменты для тестирования вне 1С

Иногда удобнее тестировать сервис вне кода 1С, чтобы быстро проверить структуру входящих и исходящих параметров:

Подводя итог, можно сказать, что вызов веб-сервиса из самой базы — это отличный способ модульного тестирования. Главное — правильно настроить публикацию на веб-сервере и корректно передать параметры в объект WSОпределения. Если же логика сервиса становится слишком сложной, рекомендуем вынести код в общий модуль — так вы сможете тестировать его стандартными средствами обработки, без необходимости каждый раз обращаться к веб-серверу.

← На главную