WS-ссылка в 1С:Предприятии 8.3: зачем нужна, как создать и подключить веб-сервис

· 9 мин

Содержание

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-ссылку в Конфигураторе

  1. Сделайте резервную копию базы : Администрирование → Выгрузить информационную базу. Изменение конфигурации потом придётся применять к базе.
  2. Откройте дерево конфигурации, ветку Общие → WS-ссылки.
  3. Нажмите «Добавить». Платформа предложит указать источник WSDL: адрес в интернете или файл на диске.
  4. Если сервис закрыт паролем, введите логин и пароль в том же окне. Для самих вызовов логин и пароль всё равно задают в коде, через свойства прокси.
  5. Дайте ссылке понятное имя латиницей или кириллицей без пробелов, например СервисКонтрагентов. Это имя потом пишут в коде после WSСсылки..
  6. Сохраните конфигурацию и обновите конфигурацию базы данных (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/<имя>?wsdlWSDL веб-сервиса (SOAP)Внешняя система, другая база 1С
http://server/base/hs/<корень>/...HTTP-сервис (REST)Сайт, мобильное приложение
http://server/base/odata/standard.odata/Стандартный интерфейс ODataBI-системы, внешние отчёты

Где <имя> — имя файла публикации веб-сервиса из его свойств (например, exchange.1cws) или имя сервиса.

HTTP и HTTPS отличаются только шифрованием канала. Протокол SOAP одинаковый, меняется схема адреса и требования к сертификату. Если сервис доступен по https://, а WSDL импортировали по http://, проверьте адрес точки подключения внутри WSDL: часто он остаётся старым, и вызовы уходят по незащищённому каналу или упираются в редирект.

Как опубликовать веб-сервис 1С на веб-сервере

Этот раздел нужен, если 1С выступает сервером: вы описали объект Общие → Web-сервисы с операциями и хотите, чтобы его вызывали снаружи.

Подготовка

  • 🖥 Установлен веб-сервер: Apache 2.4 или IIS.
  • 🧱 При установке платформы отмечен компонент «Модули расширения веб-сервера». Без него пункт публикации есть, но работать не будет.
  • 📏 Разрядность модуля совпадает с разрядностью веб-сервера: 64-битный Apache — 64-битная платформа.
  • 👤 В базе создан отдельный пользователь для интеграции с минимальными правами.

Публикация пошагово

  1. Запустите Конфигуратор от имени администратора Windows. Без повышенных прав платформа не запишет файлы в каталог веб-сервера.
  2. Откройте Администрирование → Публикация на веб-сервере.
  3. Укажите имя публикации латиницей, например base. Оно станет частью адреса.
  4. Выберите веб-сервер и каталог публикации.
  5. На вкладке веб-сервисов включите флаг публикации и отметьте нужные сервисы. Лишние снимите.
  6. Нажмите «Опубликовать». Для Apache платформа предложит перезапустить веб-сервер — это оборвёт сеансы всех, кто работает через веб-клиент, делайте это в нерабочее время.
  7. Откройте в браузере 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=&quot;app01&quot;;Ref=&quot;base&quot;;">
  <ws pointEnableCommon="true">
    <point name="Exchange" alias="exchange.1cws" enable="true"/>
  </ws>
</point>

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

Доступ и безопасность веб-сервиса 1С

Опубликованный SOAP-сервис виден всем, кто дотянется до веб-сервера. Настройте защиту до того, как отдать адрес партнёру.

Аутентификация

  • 🔑 Внешняя система передаёт логин и пароль пользователя 1С (Basic-аутентификация). В WS-ссылке со стороны клиента это свойства прокси Пользователь и Пароль.
  • 🚫 Не записывайте логин и пароль в default.vrd для автоматического входа. Так любой, кто знает адрес, работает от имени этого пользователя.
  • 👥 Заведите отдельного пользователя под каждую внешнюю систему. Так проще отозвать доступ и разобрать журнал регистрации.

Права пользователя

Пользователь интеграции получает только те данные, которые реально читает или пишет сервис. Роль «Полные права» для него — плохая идея: при утечке пароля злоумышленник получит всю базу.

Шифрование и сеть

  1. Включите HTTPS на веб-сервере и выпустите сертификат на имя сервера.
  2. Закройте http:// или перенаправьте его на https://.
  3. Ограничьте доступ к каталогу публикации по IP-адресам партнёров средствами веб-сервера или межсетевого экрана.
  4. Не публикуйте лишнее: снимите флаги веб-клиента, HTTP-сервисов и OData, если они не нужны.

Со стороны клиента защищённое соединение задаётся объектом ЗащищенноеСоединениеOpenSSL, который передают при создании прокси или определений. Если у партнёра самоподписанный сертификат, правильный путь — добавить его корневой сертификат в доверенные, а не отключать проверку.

Перед тем как давать адрес партнёру, проверьте сервис сами из SoapUI или Postman: загрузите WSDL и вызовите одну операцию. Так вы отделите проблемы публикации от проблем на стороне партнёра.

Ошибки WS-ссылки и веб-сервиса: что проверить

Сообщения платформы обычно содержат HTTP-код. По нему проще всего понять, на каком участке сбой.

Диагностика: выберите симптом

Если ошибка плавает

Сервис отвечает через раз — смотрите таймаут. По умолчанию его может не хватить на тяжёлую операцию. Таймаут задаётся параметром при создании прокси. На стороне сервера проверьте нагрузку на рабочие процессы и время жизни сеанса в свойствах объекта «Web-сервис».

OData, HTTP-сервисы и другие способы вместо SOAP

SOAP — не единственный путь интеграции. Иногда WS-ссылка вообще не нужна.

Стандартный интерфейс OData

OData — REST-интерфейс, который платформа строит автоматически по метаданным. Программировать операции не надо: справочники, документы и регистры доступны по адресу .../odata/standard.odata/.

Что нужно сделать:

  1. При публикации отметить флаг стандартного интерфейса OData.
  2. Указать, какие объекты в него входят. Без этого состав пустой. В конфигурациях на БСП для этого есть настройка в разделе Администрирование, в коде — метод УстановитьСоставСтандартногоИнтерфейсаOData.
  3. Дать пользователю интеграции права на эти объекты.

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

HTTP-сервисы

Объект Общие → HTTP-сервисы — собственный REST API на встроенном языке. Обмен обычно идёт в JSON, адреса вида /hs/.... Для вызова чужого REST-сервиса из 1С используют HTTPСоединение и HTTPЗапрос, без всяких WSDL.

Что выбрать

ЗадачаПодходящий механизм
Партнёр выдал WSDL и работает только по SOAPWS-ссылка или WSОпределения
Нужно отдать данные в Power BI или внешний отчётOData
Сайт или приложение ждёт JSONHTTP-сервис
Обмен между двумя базами 1С на типовых конфигурацияхШтатный обмен данных, а не своя интеграция

Частые вопросы

Нужна ли публикация на веб-сервере, чтобы использовать WS-ссылку?
Нет. WS-ссылка — клиентская сторона, база только отправляет запросы. Публикация нужна той стороне, которая предоставляет сервис.
Можно ли создать WS-ссылку в расширении конфигурации?
Да, WS-ссылки можно добавлять в расширение. Это удобный способ не снимать типовую конфигурацию с поддержки.
Как обновить WS-ссылку, если партнёр изменил сервис?
Повторите импорт WSDL для этой ссылки в Конфигураторе, затем обновите конфигурацию базы. Проверьте код: удалённые операции и параметры дадут ошибки.
Работает ли веб-сервис с файловой базой?
Работает, но под нагрузкой и при параллельных вызовах файловый вариант быстро упирается в блокировки. Для постоянной интеграции лучше клиент-серверная база.
Как посмотреть, какой XML уходит в сервис?
Удобнее всего прогнать вызов через SoapUI или промежуточный прокси вроде Fiddler. На стороне сервера-1С обращения и ошибки видны в журнале регистрации.