WS-ссылка в 1С:Предприятии 8.3: зачем нужна, как создать и подключить веб-сервис
Содержание
WS-ссылка в 1С:Предприятии — это объект конфигурации в ветке Общие → WS-ссылки, который хранит описание чужого веб-сервиса (файл WSDL). Через неё ваша база вызывает операции внешней системы по протоколу SOAP. Создаётся она в Конфигураторе импортом WSDL по адресу или из файла.
Частое заблуждение: WS-ссылкой называют адрес вида http://server/base/ws/exchange.1cws?wsdl. Это не ссылка, а адрес опубликованного веб-сервиса вашей базы. Направления противоположные: WS-ссылка нужна, чтобы 1С была клиентом, а объект «Web-сервис» и публикация — чтобы 1С была сервером. Ниже настройка обеих сторон, потому что на практике они почти всегда идут парой.
Что означает WS и как устроена WS-ссылка
WS — сокращение от Web Services, веб-сервисы. В 1С под этим понимают именно SOAP-сервисы: обмен XML-сообщениями по заранее описанному контракту. Контракт лежит в WSDL — XML-файле, где перечислены операции, их параметры и типы данных.
Что хранит WS-ссылка после импорта:
- 📄 копию WSDL внутри конфигурации — платформа больше не запрашивает её при каждом вызове;
- 🧩 список сервисов, точек подключения (портов) и операций;
- 🏷 пространства имён и типы XDTO, нужные для параметров;
- 🔗 исходный адрес, с которого WSDL загрузили.
В коде WS-ссылка даёт доступ к прокси-объекту. Через него операция внешнего сервиса вызывается как обычный метод:
Прокси = WSСсылки.СервисКонтрагентов.СоздатьWSПрокси(
"http://example.org/partners", // URI пространства имён
"PartnersService", // имя сервиса из WSDL
"PartnersServiceSoap"); // имя точки подключения
Прокси.Пользователь = "api_user";
Прокси.Пароль = ПарольИзХранилища;
Ответ = Прокси.GetPartner("7701234567");
Пространство имён, имя сервиса и точки подключения не придумывают. Их берут из WSDL: в Конфигураторе раскройте WS-ссылку, и все три значения будут видны в дереве.
Как создать WS-ссылку в Конфигураторе
- Сделайте резервную копию базы
:
Администрирование → Выгрузить информационную базу. Изменение конфигурации потом придётся применять к базе. - Откройте дерево конфигурации, ветку
Общие → WS-ссылки. - Нажмите «Добавить». Платформа предложит указать источник WSDL: адрес в интернете или файл на диске.
- Если сервис закрыт паролем, введите логин и пароль в том же окне. Для самих вызовов логин и пароль всё равно задают в коде, через свойства прокси.
- Дайте ссылке понятное имя латиницей или кириллицей без пробелов, например
СервисКонтрагентов. Это имя потом пишут в коде послеWSСсылки.. - Сохраните конфигурацию и обновите конфигурацию базы данных (F7).
Если импорт прошёл, в дереве под ссылкой появятся сервисы и операции. Двойной щелчок по операции показывает её параметры и тип возвращаемого значения. Это быстрый способ понять, что ждёт партнёр, не читая XML вручную.
Обновление конфигурации базы в рабочее время задевает пользователей: если изменение требует реструктуризации, нужен монопольный доступ. Для одной новой WS-ссылки реструктуризация обычно не нужна, но планируйте работу на момент, когда в базе мало людей.
Статическая и динамическая схема
Есть два способа обратиться к внешнему сервису.
| Способ | Как работает | Когда выбирать | Минус |
|---|---|---|---|
| WS-ссылка | WSDL импортирован в конфигурацию | Контракт стабилен, сервис один и известен заранее | Изменился WSDL — нужно обновлять конфигурацию |
WSОпределения + WSПрокси | WSDL читается по адресу во время работы | Адрес или контракт меняется, нельзя править типовую конфигурацию | Лишний запрос WSDL, ошибки видны только при запуске |
Динамический вариант выглядит так:
Определения = Новый WSОпределения("https://partner.example.org/svc?wsdl", "api_user", Пароль);
Прокси = Новый WSПрокси(Определения, "http://example.org/partners",
"PartnersService", "PartnersServiceSoap");
В типовых конфигурациях на поддержке WS-ссылки лучше не добавлять: каждое новое метаданное снимает конфигурацию с полной поддержки или требует расширения. Для разовой интеграции динамическая схема или расширение конфигурации проще в сопровождении.
Чем ws-адрес отличается от обычной HTTP- или HTTPS-ссылки
Адрес опубликованной базы и адрес её веб-сервиса — разные вещи, хотя начинаются одинаково. После публикации у базы появляется несколько «входов» с разными суффиксами.
| Адрес | Что открывает | Кто обращается |
|---|---|---|
http://server/base/ | Веб-клиент 1С | Пользователь в браузере |
http://server/base/ws/<имя>?wsdl | WSDL веб-сервиса (SOAP) | Внешняя система, другая база 1С |
http://server/base/hs/<корень>/... | HTTP-сервис (REST) | Сайт, мобильное приложение |
http://server/base/odata/standard.odata/ | Стандартный интерфейс OData | BI-системы, внешние отчёты |
Где <имя> — имя файла публикации веб-сервиса из его свойств (например, exchange.1cws) или имя сервиса.
HTTP и HTTPS отличаются только шифрованием канала. Протокол SOAP одинаковый, меняется схема адреса и требования к сертификату. Если сервис доступен по https://, а WSDL импортировали по http://, проверьте адрес точки подключения внутри WSDL: часто он остаётся старым, и вызовы уходят по незащищённому каналу или упираются в редирект.
Как опубликовать веб-сервис 1С на веб-сервере
Этот раздел нужен, если 1С выступает сервером: вы описали объект Общие → Web-сервисы с операциями и хотите, чтобы его вызывали снаружи.
Подготовка
- 🖥 Установлен веб-сервер: Apache 2.4 или IIS.
- 🧱 При установке платформы отмечен компонент «Модули расширения веб-сервера». Без него пункт публикации есть, но работать не будет.
- 📏 Разрядность модуля совпадает с разрядностью веб-сервера: 64-битный Apache — 64-битная платформа.
- 👤 В базе создан отдельный пользователь для интеграции с минимальными правами.
Публикация пошагово
- Запустите Конфигуратор от имени администратора Windows. Без повышенных прав платформа не запишет файлы в каталог веб-сервера.
- Откройте
Администрирование → Публикация на веб-сервере. - Укажите имя публикации латиницей, например
base. Оно станет частью адреса. - Выберите веб-сервер и каталог публикации.
- На вкладке веб-сервисов включите флаг публикации и отметьте нужные сервисы. Лишние снимите.
- Нажмите «Опубликовать». Для Apache платформа предложит перезапустить веб-сервер — это оборвёт сеансы всех, кто работает через веб-клиент, делайте это в нерабочее время.
- Откройте в браузере
http://server/base/ws/exchange.1cws?wsdl. Должен отобразиться XML с описанием операций.
После публикации в каталоге появится файл default.vrd. В нём записаны строка соединения с базой и список опубликованных сервисов. Его можно править вручную, но после повторной публикации из Конфигуратора изменения перезапишутся.
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
base="/base" ib="Srvr="app01";Ref="base";">
<ws pointEnableCommon="true">
<point name="Exchange" alias="exchange.1cws" enable="true"/>
</ws>
</point>
Для файловой базы пользователь, под которым работает веб-сервер (для IIS это обычно учётная запись пула приложений или IUSR), должен иметь права на чтение и запись каталога базы. Иначе вызов падает с ошибкой файловой операции.
Доступ и безопасность веб-сервиса 1С
Опубликованный SOAP-сервис виден всем, кто дотянется до веб-сервера. Настройте защиту до того, как отдать адрес партнёру.
Аутентификация
- 🔑 Внешняя система передаёт логин и пароль пользователя 1С (Basic-аутентификация). В WS-ссылке со стороны клиента это свойства прокси
ПользовательиПароль. - 🚫 Не записывайте логин и пароль в
default.vrdдля автоматического входа. Так любой, кто знает адрес, работает от имени этого пользователя. - 👥 Заведите отдельного пользователя под каждую внешнюю систему. Так проще отозвать доступ и разобрать журнал регистрации.
Права пользователя
Пользователь интеграции получает только те данные, которые реально читает или пишет сервис. Роль «Полные права» для него — плохая идея: при утечке пароля злоумышленник получит всю базу.
Шифрование и сеть
- Включите HTTPS на веб-сервере и выпустите сертификат на имя сервера.
- Закройте
http://или перенаправьте его наhttps://. - Ограничьте доступ к каталогу публикации по IP-адресам партнёров средствами веб-сервера или межсетевого экрана.
- Не публикуйте лишнее: снимите флаги веб-клиента, HTTP-сервисов и OData, если они не нужны.
Со стороны клиента защищённое соединение задаётся объектом ЗащищенноеСоединениеOpenSSL, который передают при создании прокси или определений. Если у партнёра самоподписанный сертификат, правильный путь — добавить его корневой сертификат в доверенные, а не отключать проверку.
Перед тем как давать адрес партнёру, проверьте сервис сами из SoapUI или Postman: загрузите WSDL и вызовите одну операцию. Так вы отделите проблемы публикации от проблем на стороне партнёра.
Ошибки WS-ссылки и веб-сервиса: что проверить
Сообщения платформы обычно содержат HTTP-код. По нему проще всего понять, на каком участке сбой.
Если ошибка плавает
Сервис отвечает через раз — смотрите таймаут. По умолчанию его может не хватить на тяжёлую операцию. Таймаут задаётся параметром при создании прокси. На стороне сервера проверьте нагрузку на рабочие процессы и время жизни сеанса в свойствах объекта «Web-сервис».
OData, HTTP-сервисы и другие способы вместо SOAP
SOAP — не единственный путь интеграции. Иногда WS-ссылка вообще не нужна.
Стандартный интерфейс OData
OData — REST-интерфейс, который платформа строит автоматически по метаданным. Программировать операции не надо: справочники, документы и регистры доступны по адресу .../odata/standard.odata/.
Что нужно сделать:
- При публикации отметить флаг стандартного интерфейса OData.
- Указать, какие объекты в него входят. Без этого состав пустой. В конфигурациях на БСП для этого есть настройка в разделе
Администрирование, в коде — методУстановитьСоставСтандартногоИнтерфейсаOData. - Дать пользователю интеграции права на эти объекты.
OData хорош для чтения данных во внешние отчёты и BI. Для сложной бизнес-логики, где нужна проверка и запись по правилам, он подходит хуже.
HTTP-сервисы
Объект Общие → HTTP-сервисы — собственный REST API на встроенном языке. Обмен обычно идёт в JSON, адреса вида /hs/.... Для вызова чужого REST-сервиса из 1С используют HTTPСоединение и HTTPЗапрос, без всяких WSDL.
Что выбрать
| Задача | Подходящий механизм |
|---|---|
| Партнёр выдал WSDL и работает только по SOAP | WS-ссылка или WSОпределения |
| Нужно отдать данные в Power BI или внешний отчёт | OData |
| Сайт или приложение ждёт JSON | HTTP-сервис |
| Обмен между двумя базами 1С на типовых конфигурациях | Штатный обмен данных, а не своя интеграция |