Как создать web-сервис в 1С из готового WSDL-файла?

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

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

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

Способ 1: Извлечение XSD-схем для генерации XDTO-пакетов

Если внешний WSDL-файл уже имеется, самая трудоемкая часть — это создание схемы XDTO, которая описывает типы данных. Создавать десятки пакетов вручную долго и чревато ошибками. Рассмотрим по шагам, как автоматизировать этот процесс.

  1. Откройте исходный WSDL-файл. Для этого можно использовать обычный Блокнот, специализированные XML-редакторы или инструменты для тестирования API (например, SoapUI).
  2. Найдите в файле блоки, описывающие схемы данных. Нас интересует содержимое тегов:
    
    <xsd:schema>
    ...
    </xsd:schema>
    
  3. Аккуратно скопируйте каждый такой блок и сохраните его в отдельный текстовый файл с расширением .xsd. При использовании специализированных программ (XML-редакторов) схемы можно экспортировать в один клик.
  4. Перейдите в конфигуратор 1С. В ветке XDTO-пакеты воспользуйтесь штатной командой импорта XML-схемы.
  5. Загрузите подготовленные файлы. Платформа 1С автоматически сформирует деревья XDTO-пакетов, перенеся все свойства, типы данных и связи между ними.

Важно понимать, что этот шаг автоматизирует только создание типов данных. Сам объект метаданных Web-сервис в конфигураторе все равно придется создавать руками. Добавьте необходимые операции, параметры и возвращаемые значения, жестко связав их с загруженными XDTO-пакетами. Особое внимание уделите URI пространств имен (Namespaces) — они должны побуквенно совпадать с пространствами имен из исходного WSDL, иначе при публикации 1С сгенерирует контракт, который будет отклонен клиентами.

Способ 2: Использование HTTP-сервиса вместо Web-сервиса

Проанализируем ситуацию, когда предоставленный WSDL содержит очень сложные структуры, нестандартные SOAP-заголовки или типы данных, которые 1С искажает или не поддерживает при публикации SOAP-сервисов. В таких случаях классический Web-сервис 1С может не подойти.

Надежным и проверенным решением будет отказ от объекта Web-сервис в пользу объекта HTTP-сервис. Разберем механику этого подхода:

  1. В конфигураторе создается HTTP-сервис с нужным URL-шаблоном и методом POST.
  2. Внешняя система будет отправлять классические SOAP-запросы, но 1С примет их как обычное «сырое» тело HTTP-запроса (в виде исходного XML — SOAP Envelope).
  3. В модуле HTTP-метода мы получаем это тело и программно разбираем его. Для этого отлично подойдут штатные объекты ЧтениеXML или ФабрикаXDTO.ПрочитатьXML.
  4. После выполнения необходимой бизнес-логики, программно формируется ответный XML (SOAP Response), который в точности соответствует ожидаемому контракту.

Этот способ дает 100% контроль над форматом принимаемых и отправляемых сообщений, обходя любые ограничения движка публикации SOAP-сервисов платформы 1С.

Способ 3: Автоматизация через выгрузку в исходные файлы (EDT)

Если исходный WSDL содержит сотни методов и ручное создание параметров в конфигураторе недопустимо, применяют продвинутую внешнюю генерацию кода. Посмотрим на этот процесс:

С помощью внешних скриптов (например, написанных на Python) исходный WSDL-файл парсится и преобразуется в XML-файлы метаданных в том формате, который понимает платформа 1С. Сгенерированные файлы затем загружаются в проект через 1C:Enterprise Development Tools (EDT) или через стандартный механизм конфигуратора Выгрузить конфигурацию в файлы / Загрузить конфигурацию из файлов.

Таким образом, мы выяснили, что хотя платформа 1С не поддерживает прямое создание web-сервиса из WSDL одним кликом, существуют эффективные способы обхода этого ограничения. От простого копирования XSD-схем в Блокноте до полной автоматизации через скрипты и EDT или перехода на архитектуру HTTP-сервисов с ручным разбором SOAP-пакетов.

← На главную