Как исправить ошибку «Ошибка вызова операции сервиса» (Ошибка HTTP) при работе с веб-сервисом в 1С?

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

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

Рассмотрим подробнее причины возникновения этой проблемы, методы её диагностики и конкретные шаги по устранению.

Выясним причину ошибки

Проанализируем механику взаимодействия 1С с веб-сервером. Получение файла описания WSDL происходит через HTTP-запрос методом GET, в то время как вызов конкретного метода сервиса отправляется через HTTP-запрос методом POST. Если для `GET`-запросов веб-сервер пропускает обращение или использует анонимный доступ, то при выполнении `POST`-запроса происходит повторная проверка прав или выполнение кода в контексте информационной базы 1С.

Основные причины возникновения ошибки HTTP при вызове метода:

  1. Проблемы с авторизацией 1С: пользователь, под которым выполняется WS-соединение, не указан или у него отсутствуют права на исполнение операций сервиса.
  2. Непередача учетных данных в прокси: данные авторизации, указанные при создании WSОпределения, не передаются автоматически в объект WSПрокси.
  3. Исключение на стороне приемника (HTTP Status 500): внутри самой процедуры веб-сервиса 1С возникла необработанная ошибка (например, обращение к несуществующему объекту или деление на ноль).
  4. Некорректная настройка веб-сервера (IIS / Apache): включение одновременно анонимной и основной аутентификации может блокировать передачу заголовок авторизации.

Способы решения проблемы

1. Настройка авторизации в файле публикации (default.vrd)

Разберем основной способ решения, когда веб-сервис опубликован на IIS или Apache. В файле публикации default.vrd можно явно задать имя пользователя и пароль, под которыми платформа 1С будет автоматически подключаться к информационной базе при каждом вызове веб-сервиса.

Для этого в файле default.vrd найдем или добавим атрибуты ibuser и ibpwd:


<point name="DocumentsManagmentIntegration"
       alias="DocumentsManagmentIntegration.1cws"
       enable="true"
       ibuser="WSUser"
       ibpwd="WSPassword"/>

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

2. Явное указание логина и пароля в объекте WSПрокси

Посмотрим на пример кода 1С. Если авторизация задается программно во внешнем коде, параметры учетной записи следует явно передать свойствам объекта WSПрокси перед вызовом операции:


АдресWSDL = "http://localhost/DocumentsManagmentIntegration/ws/DocumentsManagmentIntegration?wsdl";
Логин = "SITK";
Пароль = "fto_sitk";

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

// Создаем прокси
URIПространстваИмен = "http://localhost/DocumentsManagmentIntegration/";
ИмяСервиса = "DocumentsManagmentIntegration";
ИмяТочкиПодключения = "DocumentsManagmentIntegrationSoap";

Прокси = Новый WSПрокси(Определение, URIПространстваИмен, ИмяСервиса, ИмяТочкиПодключения);

// Обязательно указываем авторизацию непосредственно в прокси
Прокси.Пользователь = Логин;
Прокси.Пароль = Пароль;

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

3. Проверка прав пользователя в базе 1С

Выясним, достаточно ли прав у учетной записи 1С, под которой выполняется соединение. В конфигураторе 1С проверим роли пользователя:

  1. Откроем роль, назначенную пользователю WS-соединения.
  2. Найдем в дереве метаданных нужный Web-сервис.
  3. Убедимся, что установлены флаги «Использование» как для самого сервиса, так и для всех его операций.

Диагностика ошибок с помощью сторонних утилит

Если код возвращает обезличенную ошибку HTTP, рекомендуется воспользоваться специализированным инструментом SoapUI или Postman.

  1. Создадим новый SOAP-проект в SoapUI, указав ссылку на WSDL.
  2. Сформируем запрос к вызываемому методу и передадим параметры Basic Auth в заголовках.
  3. Проанализируем полученный ответ сервера. В случае ошибки на стороне 1С в XML-теле ответа (`SOAP Fault`) будет содержаться подробное описание исключения (например, код HTTP 500 и подробный стек ошибки 1С).
← На главную