При работе с веб-сервисами (SOAP) в платформе 1С разработчики нередко сталкиваются с ситуацией: описание WSDL успешно загружается, объект WSОпределения создается без каких-либо сбоев, прокси-класс формируется, но при попытке вызвать любой метод веб-сервиса платформа возвращает неопределенную ошибку: «Ошибка вызова операции сервиса» с пометкой «Ошибка HTTP».
Рассмотрим подробнее причины возникновения этой проблемы, методы её диагностики и конкретные шаги по устранению.
Проанализируем механику взаимодействия 1С с веб-сервером. Получение файла описания WSDL происходит через HTTP-запрос методом GET, в то время как вызов конкретного метода сервиса отправляется через HTTP-запрос методом POST. Если для `GET`-запросов веб-сервер пропускает обращение или использует анонимный доступ, то при выполнении `POST`-запроса происходит повторная проверка прав или выполнение кода в контексте информационной базы 1С.
Основные причины возникновения ошибки HTTP при вызове метода:
WSОпределения, не передаются автоматически в объект WSПрокси.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С проверим роли пользователя:
Если код возвращает обезличенную ошибку HTTP, рекомендуется воспользоваться специализированным инструментом SoapUI или Postman.