Файл описания web-сервиса (WSDL) в 1С: получаем, читаем, подключаем
WSDL (Web Services Description Language) — XML-файл, описывающий SOAP-сервис: набор операций, их параметры и типы. В 1С этот файл описания web-сервиса нужен, чтобы построить WSПрокси и вызвать операции внешнего сервера как обычные методы объекта.
Получить WSDL внешнего сервиса — открыть его URL с параметром ?wsdl.
Получить WSDL опубликованного web-сервиса 1С — обратиться по адресу
<publish>/ws/<ИмяСервиса>?wsdl. Подключить в 1С — либо
статической WS-ссылкой в конфигураторе (Общие → WS-ссылки), либо
динамически через Новый WSОпределения(URL, Пользователь, Пароль).
Что такое файл описания web-сервиса (WSDL) в 1С
WSDL — это XML-документ по стандарту W3C, который описывает контракт SOAP-сервиса: какие операции он предоставляет, какие параметры они принимают, какие типы данных возвращают и по какому адресу (endpoint) с ним общаться. В терминах 1С этот файл описания web-сервиса — «карта», по которой платформа строит прокси-объект и превращает удалённые операции в вызовы методов языка 1С.
WSDL используется вместе с SOAP (Simple Object Access Protocol) — протоколом обмена XML-сообщениями поверх HTTP. Именно поэтому web-сервисы 1С — это SOAP, а не REST. Для REST в 1С есть отдельный механизм HTTP-сервисов (см. раздел «web-сервис или HTTP-сервис»).
Ключевые сущности внутри WSDL, с которыми работает 1С:
- types — описание типов данных (XSD-схемы), из них 1С строит
ФабрикаXDTO. - message — сообщения запроса и ответа операций.
- portType и operation — набор операций сервиса.
- binding — привязка операций к транспорту (SOAP 1.1 или 1.2).
- service и port — адрес точки подключения (endpoint).
Где взять WSDL внешнего SOAP-сервиса
Практически у всех SOAP-сервисов WSDL отдаётся по URL самого сервиса с параметром
?wsdl. Классические примеры:
// Внешний сервис поставщика
https://service.example.com/api/soap?wsdl
// Сервис Банка России (публичный SOAP)
https://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL
Проверьте доступность WSDL простым GET-запросом из браузера или curl: должен
вернуться XML, начинающийся с <wsdl:definitions> или
<definitions>. Если сервис отвечает HTML-страницей входа — WSDL
закрыт авторизацией, и понадобится передавать Пользователь/Пароль уже на этапе
подключения из 1С.
service.wsdl) на этапе разработки — это
ускорит анализ структуры и позволит подключать статическую WS-ссылку из файла, если
внешний сервер временно недоступен.
Файл описания опубликованного web-сервиса 1С
Когда вы публикуете свой web-сервис из конфигурации 1С через веб-сервер (Apache/IIS), платформа автоматически генерирует его WSDL. Адрес получения файла описания web-сервиса:
// Общий шаблон
http(s)://<хост>/<publish>/ws/<ИмяWebСервиса>?wsdl
// Пример: база опубликована как /demo, сервис называется ObmenDannymi
https://erp.example.com/demo/ws/ObmenDannymi?wsdl
Имя web-сервиса берётся из свойства Имя публикации объекта метаданных
WebСервис (не путайте с именем в конфигураторе). Если вместо WSDL приходит
ошибка 404 — проверьте, что сервис отмечен в файле публикации default.vrd,
а сама база доступна по указанному publish-пути.
Один и тот же файл описания web-сервиса 1С отдаёт и для тонкого, и для толстого клиента: это универсальный контракт. По нему любой SOAP-клиент — другая база 1С, Python, Java, .NET — сможет вызвать опубликованные операции.
WS-ссылки в 1С: статические и динамические
В 1С есть два способа подключить внешний SOAP-сервис по его WSDL.
Статическая WS-ссылка добавляется в конфигураторе: Общие → WS-ссылки
→ Добавить. В диалоге указывается URL WSDL, платформа скачивает файл описания
web-сервиса, разбирает его и сохраняет структуру внутри конфигурации. Дальше сервис
доступен как WSСсылки.<ИмяСсылки>. Плюс — типы и операции видны в
контекстной подсказке; минус — при изменении контракта нужно обновлять WS-ссылку и
выпускать релиз конфигурации.
Динамическое подключение — на лету, без правки конфигурации. Через
объект WSОпределения 1С загружает WSDL по URL прямо из кода и строит прокси
в оперативной памяти. Удобно для интеграций, где URL и креды хранятся в справочниках.
WSОпределения: загружаем WSDL программно
WSОпределения — объект, который читает файл описания web-сервиса по URL и
отдаёт разобранное описание сервисов, операций и типов. Это первый шаг для динамического
подключения:
// Динамическое подключение внешнего SOAP-сервиса по WSDL
URL_WSDL = "https://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL";
Определения = Новый WSОпределения(URL_WSDL);
// Если сервис требует Basic Auth — передаём Пользователь/Пароль:
// Определения = Новый WSОпределения(URL_WSDL, "user", "pass");
Для Каждого Сервис Из Определения.Сервисы Цикл
Сообщить("Сервис: " + Сервис.Имя);
КонецЦикла;
Из полученных Определения берутся имя сервиса, URI пространства имён и имя
точки подключения — их нужно передать в WSПрокси. Если сервис публичен —
четыре первых параметра конструктора WSОпределения можно опустить.
WSПрокси: вызываем операции сервиса
После загрузки WSDL создаётся прокси, у которого операции сервиса становятся методами
объекта. Конструктор принимает объект WSОпределения и координаты сервиса
внутри WSDL:
URL_WSDL = "https://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL";
URI = "http://web.cbr.ru/";
ИмяСервиса = "DailyInfo";
ИмяПорта = "DailyInfoSoap";
Определения = Новый WSОпределения(URL_WSDL);
Прокси = Новый WSПрокси(Определения, URI, ИмяСервиса, ИмяПорта);
// Basic Auth при вызовах (если сервис требует авторизации)
Прокси.Пользователь = "integration";
Прокси.Пароль = "***";
Прокси.Таймаут = 30;
// Вызов операции сервиса — как обычного метода объекта
Курс = Прокси.GetCursOnDate(ТекущаяДата());
Сообщить(Курс);
Если операция принимает сложные типы, их нужно создавать через фабрику XDTO прокси —
Прокси.ФабрикаXDTO.Создать(...). Для этого пригодятся типы, описанные в
секции types WSDL: их имена совпадают с XSD-именами.
Статическая WS-ссылка: подключение из конфигуратора
Если контракт стабильный и вы хотите видеть операции в подсказке кода, добавьте статическую WS-ссылку в конфигурации. После этого прокси создаётся одной строкой через менеджер WS-ссылок:
// В конфигураторе создана WS-ссылка "CbrDailyInfo" на WSDL Банка России
Прокси = WSСсылки.CbrDailyInfo.СоздатьWSПрокси(
"http://web.cbr.ru/", // URI пространства имён
"DailyInfo", // Имя сервиса
"DailyInfoSoap" // Имя порта (endpoint)
);
Прокси.Пользователь = "";
Прокси.Пароль = "";
Прокси.Таймаут = 30;
Курс = Прокси.GetCursOnDate(ТекущаяДата());
Сообщить(Курс);
Если у сервиса всего один service и один port, платформа
подставит их автоматически — параметры можно передать пустой строкой. Обновление
структуры сервиса делается через контекстное меню WS-ссылки → Обновить из
WSDL, после чего конфигурация требует повторной публикации.
<publish>/ws/<Имя>?wsdl прямо в браузере — удобно сверять
контракт после доработки конфигурации-источника.
Аутентификация SOAP и защищённые соединения
Самый распространённый способ авторизации SOAP-сервисов — HTTP Basic Auth. В 1С логин и пароль задаются двумя путями:
- для загрузки WSDL — параметрами конструктора
WSОпределения(URL, Пользователь, Пароль); - для вызовов операций — свойствами
Прокси.ПользовательиПрокси.Пароль.
Для HTTPS-сервисов задавайте параметр ЗащищенноеСоединение объектом
Новый ЗащищенноеСоединениеOpenSSL(...) — так можно передать клиентский
сертификат и настроить проверку серверного. Для Kerberos/NTLM в корпоративной сети
используйте ИспользоватьАутентификациюОС = Истина.
Если сервер требует WS-Security (подпись/шифрование SOAP-заголовков), стандартных средств
WSПрокси недостаточно: заголовки формируют вручную через
HTTPЗапрос или используют посреднический сервис. Для большинства бизнес-задач
хватает Basic Auth + TLS.
Web-сервис или HTTP-сервис: что выбрать в 1С
В 1С есть два разных механизма публикации интеграций, и WSDL относится только к одному из них:
- Web-сервис (SOAP) — контракт описан в WSDL, обмен — XML-конверты SOAP. Подходит для строго типизированных интеграций между корпоративными системами, для обмена «1С ↔ 1С», когда важна согласованная схема XDTO.
-
HTTP-сервис (REST) — произвольные HTTP-методы (GET/POST/PUT/DELETE),
тело в JSON или XML, без WSDL. Удобнее для интеграции с современными веб-приложениями
и мобильными клиентами, проще отлаживать через
curl/Postman.
Если вы потребляете внешний API — выбор определяет поставщик. Если публикуете свой сервис — для интеграций «1С ↔ 1С» и корпоративных потребителей чаще выбирают web-сервис (SOAP + WSDL), для веба и мобильных клиентов — HTTP-сервис.
Частые ошибки при работе с WSDL и WSПрокси в 1С
-
WSDL недоступен или требует авторизации. Проверьте, что URL отдаёт
именно XML-контракт, а не HTML логина. При необходимости передайте
Пользователь/Пароль в конструктор
WSОпределения. -
Неверные URI, имя сервиса или имя порта. Эти три параметра берутся
строго из WSDL:
targetNamespaceэлементаdefinitions, имя элементаservice, имя элементаport. Опечатка — и прокси не соберётся. -
Кодировка ответа. Если сервер отдаёт данные в 1251, а WSDL заявляет
UTF-8, вернутся «крокозябры». Проблема на стороне сервера, но обходится чтением
сырого ответа через
HTTPСоединение. -
Разные версии SOAP. Один WSDL может содержать привязки для SOAP 1.1
и SOAP 1.2 (два разных
port). Явно указывайте имя нужного порта в конструктореWSПрокси, иначе вызов может уйти по неподдерживаемой версии. - Устаревшая WS-ссылка. После изменения контракта на сервере статическая WS-ссылка в конфигураторе не обновляется автоматически — её нужно обновить из WSDL и перевыпустить релиз.
-
Таймаут по умолчанию. Не оставляйте
Таймаут = 0для внешних вызовов — при недоступности сервиса сеанс 1С «зависнет» надолго. Задавайте разумное значение (15-60 сек) и обрабатывайте исключение при обрыве. -
Сложные XDTO-параметры собирают руками. Для параметров-объектов
используйте только
Прокси.ФабрикаXDTO— так соблюдаются пространства имён и обязательные поля из XSD.
Частые вопросы про WSDL и web-сервисы 1С
Как быстро получить WSDL опубликованного web-сервиса 1С?
Откройте в браузере адрес <publish>/ws/<ИмяWebСервиса>?wsdl,
где publish — путь публикации базы на веб-сервере, а ИмяWebСервиса —
имя публикации, заданное у объекта метаданных «WebСервис». Должен вернуться XML с
корневым элементом wsdl:definitions.
Чем WSОпределения отличается от статической WS-ссылки?
WSОпределения загружает файл описания web-сервиса по URL в оперативной
памяти прямо во время работы — удобно, когда URL или креды хранятся в справочнике.
Статическая WS-ссылка сохраняется в конфигурации на этапе разработки: операции видны
в подсказке, но контракт «замораживается» до следующего обновления.
Обязательно ли использовать WSПрокси или можно вызвать SOAP через HTTPСоединение?
Можно и через HTTPСоединение, вручную собирая SOAP-конверт. Но
WSПрокси сам разбирает WSDL, строит XDTO-типы и делает вызовы
типизированными — это заметно надёжнее, чем формировать XML руками, и покрывает
подавляющее большинство сценариев интеграции.