При интеграции информационных баз 1С со сторонними системами программисты часто сталкиваются с задачей реализации собственного web-сервиса строго по предоставленному контракту (WSDL-файлу). Проблема заключается в том, что платформа 1С реализует подход «Code-First» (от кода к контракту). Система отлично умеет сама генерировать WSDL на основе созданных в конфигураторе объектов метаданных, но обратная операция (Contract-First) штатно не поддерживается.
Разберем типичную ситуацию: 1С умеет загружать описание сервиса в объект WS-ссылка. Однако этот объект предназначен исключительно для того, чтобы 1С выступала клиентом внешнего сервиса. Скопировать оттуда структуру данных для создания своего публикуемого web-сервиса платформа не дает. Проанализируем, какие существуют эффективные способы решения этой задачи, чтобы минимизировать ручной труд.
Если внешний WSDL-файл уже имеется, самая трудоемкая часть — это создание схемы XDTO, которая описывает типы данных. Создавать десятки пакетов вручную долго и чревато ошибками. Рассмотрим по шагам, как автоматизировать этот процесс.
<xsd:schema>
...
</xsd:schema>
.xsd. При использовании специализированных программ (XML-редакторов) схемы можно экспортировать в один клик.Важно понимать, что этот шаг автоматизирует только создание типов данных. Сам объект метаданных Web-сервис в конфигураторе все равно придется создавать руками. Добавьте необходимые операции, параметры и возвращаемые значения, жестко связав их с загруженными XDTO-пакетами. Особое внимание уделите URI пространств имен (Namespaces) — они должны побуквенно совпадать с пространствами имен из исходного WSDL, иначе при публикации 1С сгенерирует контракт, который будет отклонен клиентами.
Проанализируем ситуацию, когда предоставленный WSDL содержит очень сложные структуры, нестандартные SOAP-заголовки или типы данных, которые 1С искажает или не поддерживает при публикации SOAP-сервисов. В таких случаях классический Web-сервис 1С может не подойти.
Надежным и проверенным решением будет отказ от объекта Web-сервис в пользу объекта HTTP-сервис. Разберем механику этого подхода:
HTTP-сервис с нужным URL-шаблоном и методом POST.ЧтениеXML или ФабрикаXDTO.ПрочитатьXML.Этот способ дает 100% контроль над форматом принимаемых и отправляемых сообщений, обходя любые ограничения движка публикации SOAP-сервисов платформы 1С.
Если исходный WSDL содержит сотни методов и ручное создание параметров в конфигураторе недопустимо, применяют продвинутую внешнюю генерацию кода. Посмотрим на этот процесс:
С помощью внешних скриптов (например, написанных на Python) исходный WSDL-файл парсится и преобразуется в XML-файлы метаданных в том формате, который понимает платформа 1С. Сгенерированные файлы затем загружаются в проект через 1C:Enterprise Development Tools (EDT) или через стандартный механизм конфигуратора Выгрузить конфигурацию в файлы / Загрузить конфигурацию из файлов.
Таким образом, мы выяснили, что хотя платформа 1С не поддерживает прямое создание web-сервиса из WSDL одним кликом, существуют эффективные способы обхода этого ограничения. От простого копирования XSD-схем в Блокноте до полной автоматизации через скрипты и EDT или перехода на архитектуру HTTP-сервисов с ручным разбором SOAP-пакетов.