К статье
Практический материал

Разработка и Конфигурация · 11 мин

1С веб-сервисы: что за файл WSDL и для чего он нужен

Что такое WSDL-файл веб-сервиса 1С, где его взять, как опубликовать сервис на веб-сервере и подключить WS-ссылку в конфигураторе. Разбор ошибок и FAQ.

При публикации или подключении веб-сервиса 1С разработчики постоянно сталкиваются с аббревиатурой WSDL. Этот файл — ключевой элемент обмена: без него внешняя система не поймёт, какие операции предоставляет сервис, какие параметры принимать и в каком формате формировать запросы.

WSDL (Web Services Description Language) — это XML-документ, который описывает интерфейс веб-сервиса: перечень операций, типы входных и выходных параметров, адрес точки подключения и используемый протокол. В контексте 1С WSDL генерируется автоматически на основе объекта конфигурации «Web-сервис» и доступен по специальному URL после публикации базы на веб-сервере.

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

Что содержит WSDL-файл веб-сервиса 1С

WSDL-документ состоит из нескольких логических блоков. Раздел types описывает типы данных — как простые (строка, число, дата), так и сложные структуры, которые 1С формирует на основе XDTO-пакетов конфигурации. Раздел message определяет сообщения — входные и выходные наборы параметров для каждой операции.

Блок portType перечисляет сами операции — это те методы, которые вы объявили в свойствах веб-сервиса в конфигураторе. Раздел binding указывает, как операции привязаны к протоколу SOAP, а service содержит конечный адрес (endpoint), по которому сервис принимает вызовы.

Для разработчика важно понимать: WSDL — это не код и не настройка, а декларативное описание. Изменили состав параметров операции в конфигураторе — после обновления публикации изменится и WSDL, и все потребители сервиса должны получить новую версию описания.

Где взять WSDL-файл веб-сервиса 1С

1С не создаёт WSDL как отдельный файл на диске — платформа формирует его динамически при обращении по специальному URL. Адрес строится по шаблону: http://сервер/имя_публикации/ws/ИмяСервиса?wsdl. Например, если база опубликована как «trade», а веб-сервис называется «Orders», описание доступно по адресу http://server/trade/ws/Orders?wsdl.

Есть и универсальный вариант: http://сервер/имя_публикации/ws/ИмяСервиса.1cws?wsdl. Откройте URL в браузере — если публикация настроена корректно, вы увидите XML-документ. Его можно сохранить через «Сохранить как» и передать разработчику внешней системы как обычный файл с расширением .wsdl.

Как получить WSDL опубликованного сервиса
  1. 1
    Убедитесь, что база опубликована на веб-сервере с включённым флажком «Публиковать Web-сервисы»
  2. 2
    Откройте в браузере адрес http://сервер/база/ws/ИмяСервиса?wsdl
  3. 3
    При запросе авторизации введите учётные данные пользователя 1С с правами на сервис
  4. 4
    Проверьте, что в ответ пришёл XML с корневым элементом definitions
  5. 5
    Сохраните документ как файл .wsdl, если нужно передать его стороннему разработчику

Если вместо XML браузер показывает ошибку 404 — публикация не настроена или имя сервиса указано неверно. Ошибка 403 означает, что веб-сервер не имеет доступа к базе или у пользователя нет прав. Пустая страница или ошибка SOAP обычно говорят о проблемах в коде операций сервиса.

Как опубликовать веб-сервис и включить генерацию WSDL

Публикация выполняется из конфигуратора: меню «Администрирование» → «Публикация на веб-сервере». Укажите имя публикации, каталог и на вкладке «Web-сервисы» отметьте нужные сервисы. Платформа запишет настройки в файл default.vrd в каталоге публикации.

Именно в default.vrd содержится блок <point name="ИмяСервиса" ...>, который включает обработку запросов к сервису и генерацию WSDL. Если веб-сервер (Apache или IIS) настроен правильно и модуль веб-расширения 1С зарегистрирован, после перезапуска веб-сервера WSDL станет доступен по URL.

Для файловых баз публикация тоже возможна, но помните об ограничении: все вызовы веб-сервиса будут обрабатываться в монопольном по сути режиме веб-расширения, что при высокой нагрузке приведёт к очередям и таймаутам. Для промышленной эксплуатации веб-сервисов рекомендуется клиент-серверный вариант работы.

Как использовать WSDL в 1С: WS-ссылки

Обратная задача — вызвать из 1С внешний веб-сервис. Для этого в конфигурации есть объект «WS-ссылка» (WSReference). При создании ссылки вы указываете URL WSDL-документа, и конфигуратор импортирует описание: операции, типы данных, пространства имён. После этого вызов сервиса из кода становится типизированным.

Пример работы через WS-ссылку:

Определение = Новый WSОпределения("http://server/service?wsdl", "Пользователь", "Пароль");

Прокси = Новый WSПрокси(Определение, "http://namespace/", "MyService", "MyServiceSoap");

Результат = Прокси.GetData(Параметр);

WSОпределения можно создавать и без WS-ссылки в конфигурации — прямо из кода, как показано выше. Это удобно для разовых интеграций, но импорт через конфигуратор даёт контроль версий: описание сервиса фиксируется в метаданных, и изменение чужого WSDL не сломает ваш код незаметно.

Структура WSDL и XDTO-пакеты 1С

Связь между конфигурацией и WSDL проходит через механизм XDTO. Типы параметров и возвращаемых значений операций веб-сервиса описываются в XDTO-пакетах — и именно они попадают в секцию types WSDL-документа в виде XML-схем (XSD). Простые типы (string, int, dateTime) мапятся напрямую, а составные объекты превращаются в complexType.

Пространство имён XDTO-пакета, которое вы указываете в конфигураторе, становится targetNamespace в WSDL. Это важно для совместимости: некоторые потребители (например, строгие Java- или .NET-клиенты) чувствительны к пространствам имён, и их бессистемное изменение при доработках ломает существующие интеграции.

Типичные ошибки
01
Меняют состав параметров операции и забывают сообщить потребителям — внешние системы продолжают слать запросы по старому контракту и получают ошибки разбора
02
Используют в качестве параметров прикладные объекты (СправочникСсылка и т.п.) вместо XDTO-типов — такие типы невозможно корректно описать в WSDL для внешних систем
03
Меняют пространство имён пакета при рефакторинге — все существующие клиенты сервиса ломаются, хотя адрес и операции остались прежними
04
Проверяют WSDL из браузера без авторизации и делают вывод, что сервис не работает, хотя просто не введены учётные данные пользователя 1С

Типичные проблемы с WSDL и их диагностика

Самая частая жалоба — «WSDL не открывается». Диагностику стоит вести по цепочке: сначала проверить, что база вообще доступна через веб-сервер (открыть тонкий клиент по веб-адресу), затем — что в публикации включены веб-сервисы, затем — что конкретный сервис отмечен к публикации в default.vrd, и только потом искать ошибки в коде.

Вторая группа проблем — ошибки при импорте WSDL внешней системой или конфигуратором 1С. Причины обычно такие: WSDL ссылается на импортируемые схемы по относительным адресам, недоступным потребителю; в типах данных используются конструкции, которые не поддерживает конкретный клиент; сервер отдаёт WSDL по HTTP, а клиент требует HTTPS, или наоборот.

Контрольные точки

Как проверить результат

Открытие URL .../ws/ИмяСервиса?wsdl в браузере
Норма

Отображается XML с корневым элементом definitions

Тревожный признак

Ошибка 404, 403, 500 или пустой ответ

Вызов тестовой операции через SoapUI или аналог
Норма

SOAP-ответ с ожидаемыми данными

Тревожный признак

SOAP Fault с текстом ошибки из модуля сервиса

Импорт WSDL в WS-ссылку конфигуратора
Норма

Дерево операций и типов загружено без предупреждений

Тревожный признак

Ошибка разбора схемы или недоступность импортируемых namespace

Адрес endpoint в секции service
Норма

Совпадает с реальным адресом публикации

Тревожный признак

Внутренний адрес сервера, недоступный потребителям извне

Полезный приём: сохраните WSDL файлом и откройте его в любом SOAP-клиенте (например, SoapUI). Инструмент покажет список операций и сгенерирует шаблон запроса — так вы за минуты проверите работоспособность сервиса без написания кода на стороне потребителя.

Безопасность и ограничения при работе с WSDL

WSDL сам по себе не содержит данных, но полностью раскрывает интерфейс сервиса. Поэтому доступ к описанию должен быть так же защищён, как и к вызовам: базовая аутентификация 1С, HTTPS-канал, при необходимости — ограничение по IP на уровне веб-сервера. Помните, что при базовой аутентификации логин и пароль передаются в заголовках, и без шифрования они легко перехватываются.

Из ограничений платформы стоит знать: веб-сервисы 1С работают по SOAP, и если потребителю нужен REST/JSON, WSDL ему не поможет — потребуется либо HTTP-сервисы 1С (у них нет WSDL по определению), либо прослойка-адаптер. Также WSDL не описывает бизнес-логику и ограничения данных: длины строк, обязательность полей сверх схемы и допустимые значения придётся документировать отдельно.

Итог

Что важно запомнить

WSDL — это автоматически генерируемое XML-описание веб-сервиса 1С, доступное по адресу /ws/ИмяСервиса?wsdl после публикации. Оно служит контрактом для внешних систем и для WS-ссылок внутри 1С. Изменили операции или типы — обновите WSDL у всех потребителей и не забывайте про аутентификацию и HTTPS.

Частые вопросы о WSDL в 1С

Можно ли получить WSDL без публикации на веб-сервере?

Нет, штатный механизм формирует WSDL только через веб-публикацию. Если нужно просто показать контракт разработчику, поднимите тестовую публикацию на локальном Apache или IIS, сохраните XML из браузера и передайте файлом. Руками писать WSDL для 1С-сервиса не требуется.

Почему браузер запрашивает логин и пароль при открытии WSDL?

Потому что доступ к веб-сервису защищён аутентификацией 1С. Введите имя и пароль пользователя базы, у которого есть право на использование данного веб-сервиса. Если описание должно быть общедоступным, это настраивается на уровне веб-сервера, но делать так без необходимости не стоит.

Чем WS-ссылка отличается от создания WSОпределения в коде?

WS-ссылка фиксирует описание сервиса в метаданных: импорт происходит один раз в конфигураторе, и код не зависит от доступности WSDL в момент вызова. WSОпределения в коде каждый раз загружает WSDL по сети — гибче при часто меняющемся чужом сервисе, но медленнее и уязвимее к недоступности источника.

Изменил операцию в конфигураторе, а WSDL остался старым. Что делать?

Обновите публикацию: откройте диалог публикации на веб-сервере и перезапишите её, либо перезапустите веб-сервер (для Apache — restart службы). Также проверьте, что вы смотрите WSDL той же базы, которую изменяли, — частая причина путаницы в том, что тестовая и рабочая публикации живут по соседним адресам.

Подойдёт ли WSDL 1С для интеграции с сайтом на PHP или Python?

Да, если на стороне сайта есть SOAP-клиент (для PHP это SoapClient, для Python — библиотеки вроде zeep). Клиент читает WSDL и автоматически строит методы вызова. Ограничение: сложные XDTO-типы с вложенными структурами иногда требуют ручной донастройки разбора ответа.

Есть ли WSDL у HTTP-сервисов 1С?

Нет. WSDL — атрибут исключительно SOAP-сервисов. HTTP-сервисы 1С работают по произвольным шаблонам URL и форматам (JSON, XML, что угодно), и их контракт описывается вручную в документации либо через спецификацию OpenAPI, которую придётся составить самостоятельно.