При настройке синхронизации данных между конфигурациями 1С (например, 1С:ERP и 1С:Бухгалтерия предприятия) через прямое подключение по веб-сервису разработчики и администраторы часто сталкиваются со следующей ошибкой:
{ОбщийМодуль.ОбщегоНазначения.Модуль(5469)}: Ошибка при вызове конструктора (WSОпределения) Определения = Новый WSОпределения(ОписаниеФайла.Путь, ИмяПользователя, Пароль, ИнтернетПрокси, Таймаут); по причине: WSDL должен содержать элемент definitions по причине: Неверный формат.
Разберем подробно причины возникновения этой проблемы и рассмотрим способы её устранения как в стандартном мастере обмена Библиотеки Стандартных Подсистем (БСП), так и при программном вызове сервисов.
Ошибка возникает в момент, когда платформа 1С через конструктор WSОпределения пытается проанализировать скачанный WSDL-файл с описанием веб-сервиса. Если сервер вместо корректного XML-описания возвращает HTML-страницу с ошибкой веб-сервера (например, 401 Unauthorized, 404 Not Found или 500 Internal Server Error), парсер 1С не обнаруживает корневой XML-элемент definitions и выдаёт сообщение о неверном формате.
Главные причины получения некорректного ответа от веб-сервера:
http://server/base/ws/Exchange.1cws?wsdl) вместо базового адреса базы.default.vrd отсутствуют или отключены нужные сервисы обмена (в частности InterfaceVersion и Exchange)./ws/ до того, как запрос передается платформе 1С.Разберем по шагам, как корректно указать параметры в типовой обработке настройки обмена:
.1cws или суффиксов ?wsdl.Пример правильного адреса:
http://myserver/erp_base
Пример НЕПРАВИЛЬНОГО адреса:
http://myserver/erp_base/ws/Exchange.1cws?wsdl
Подсистема обмена данными БСП автоматически формирует необходимые обращения к сервисам InterfaceVersion и Exchange, добавляя нужные пути к базовому URL. Если указать полный путь вручную, цепочка вызовов ломается, и сервер возвращает ошибку 404 или 500.
Если базовый адрес указан верно, но ошибка сохраняется, проанализируем файл публикации default.vrd, расположенный в каталоге веб-сервера. Проверим наличие публикаций служебных веб-сервисов обмена:
<ws>
<point name="Exchange" alias="Exchange.1cws"/>
<point name="Exchange_2_0_1_1_6" alias="Exchange_2_0_1_1_6.1cws"/>
<point name="InterfaceVersion" alias="InterfaceVersion.1cws"/>
</ws>
Особое внимание следует обратить на сервис InterfaceVersion. Если он не опубликован, мастер настройки не сможет определить поддерживаемые версии программных интерфейсов целевой базы и выдаст сбой при формировании параметров подключения.
Если задача заключается не в настройке типового обмена БСП, а в написании собственного модуля интеграции, сформировать прокси-объект можно программно с помощью функции подсистемы ОбщегоНазначения.ВнутренняяWSПрокси.
Посмотрим на пример создания подключения к сервису обмена из кода 1С:
СтрукПараметры = Новый Структура;
СтрукПараметры.Вставить("АдресWSDL", "http://myserver/erp_base/ws/Exchange.1cws?wsdl");
СтрукПараметры.Вставить("URIПространстваИмен", "http://www.1c.ru/SSL/Exchange");
СтрукПараметры.Вставить("ИмяСервиса", "Exchange");
СтрукПараметры.Вставить("ИмяТочкиПодключения", "ExchangeSoap");
СтрукПараметры.Вставить("ИмяПользователя", "ws_user");
СтрукПараметры.Вставить("Пароль", "ws_password");
СтрукПараметры.Вставить("Таймаут", 60);
Прокси = ОбщегоНазначения.ВнутренняяWSПрокси(СтрукПараметры);
Если Прокси <> Неопределено Тогда
// Вызов методов веб-сервиса
// Результат = Прокси.УстановитьИзменения(...);
КонецЕсли;
Если причина сбоя остается непонятной, проанализируем содержимое ответа веб-сервера с помощью отладчика 1С:
ОбщегоНазначения в конфигураторе.Новый WSОпределения(...).ОписаниеФайла.Путь (это путь к временному файлу на диске).Внутри файла будет находиться реальный текст ответа сервера (например, HTML-страница ошибки IIS или сообщения об ошибке аутентификации 401 Unauthenticated), что позволит сразу точно определить сетевую или конфигурационную причину сбоя.