Откуда берётся URL веб-сервиса 1С и где его найти на сервере

· 10 мин

Содержание

Адрес веб-сервиса 1С собирается по схеме http://<сервер>/<имя публикации>/ws/<имя файла публикации>?wsdl. Например: http://srv-1c/buh/ws/Exchange.1cws?wsdl. Сервер и имя публикации узнают в настройках публикации на веб-сервере, а последнюю часть — в свойствах веб-сервиса в Конфигураторе.

Чтобы узнать адрес точно, нужны две вещи: доступ к Конфигуратору базы и доступ к веб-серверу (IIS или Apache), через который база опубликована. Если чего-то одного нет, адрес всё равно можно восстановить — по файлу default.vrd или по конфигурации Apache. Тема общая для платформы 8.3 и не зависит от конфигурации: БП, ЗУП, УТ и самописные базы публикуются одинаково.

Из каких частей состоит URL веб-сервиса

Разберём адрес https://api.firma.ru/trade/ws/Orders.1cws?wsdl по кусочкам.

Часть адресаПримерОткуда берётся
Протоколhttps://Настройки веб-сервера: есть ли сертификат и привязка к порту 443
Хост и портapi.firma.ru или srv-1c:8080Имя или IP веб-сервера, порт сайта в IIS/Apache
Имя публикацииtradeПоле «Имя» при публикации базы, оно же виртуальный каталог
Префикс сервисаwsФиксированная часть для SOAP-веб-сервисов
Имя файла публикацииOrders.1cwsСвойство веб-сервиса в Конфигураторе
Параметр?wsdlЗапрос описания сервиса (WSDL)

Без ?wsdl адрес — это точка, куда внешняя система отправляет SOAP-запросы. С ?wsdl — адрес описания, которое понимают SoapUI, Postman и 1С-клиенты через WSОпределения.

Рядом с ws в той же публикации живут и другие механизмы. Их часто путают:

  • 🔹 /ws/... — SOAP веб-сервисы (объекты «Web-сервисы» в конфигурации);
  • 🔹 /hs/... — HTTP-сервисы, REST-подобные (объекты «HTTP-сервисы»), после hs идёт корневой URL сервиса;
  • 🔹 /odata/standard.odata/ — стандартный интерфейс OData;
  • 🔹 адрес без суффикса (http://srv-1c/trade/) — вход в базу через веб-клиент или тонкий клиент по HTTP.

Если вам прислали адрес с /hs/, это не веб-сервис в терминах 1С, а HTTP-сервис. WSDL у него нет, и ?wsdl к нему добавлять бесполезно.

Где посмотреть адрес веб-сервиса в Конфигураторе

Конфигуратор показывает «хвост» адреса — то, что идёт после /ws/.

  1. Откройте базу в режиме Конфигуратор.
  2. Откройте дерево конфигурации: Конфигурация → Открыть конфигурацию.
  3. Разверните ветку Общие → Web-сервисы.
  4. Выделите нужный сервис и откройте его свойства (Alt+Enter или двойной щелчок).
  5. Найдите свойство Имя файла публикации. Это и есть последняя часть адреса, например Orders.1cws.

В свойствах есть ещё два поля, которые к адресу не относятся, но сбивают с толку:

  • 📌 Имя — внутреннее имя объекта метаданных. Оно может не совпадать с именем файла публикации.
  • 📌 URI пространства имен — идентификатор XML-пространства имён, например http://www.firma.ru/orders. Он выглядит как ссылка, но по нему ничего не открывается. Это не адрес сервиса, и вставлять его во внешнюю систему как точку подключения нельзя.

Самая частая путаница: разработчик берёт URI пространства имен и пытается открыть его в браузере. Получает 404 или чужой сайт. Адрес сервиса строится только от веб-сервера.

На вкладке операций (ветка Операции под сервисом) видно, какие методы сервис отдаёт. Это пригодится для проверки: те же операции должны появиться в WSDL.

Если доступа к Конфигуратору нет

Подойдёт программная проверка из самой базы. Функция СтрокаСоединенияИнформационнойБазы() возвращает строку подключения. Если пользователь вошёл через веб-сервер, в ней будет параметр ws= с адресом публикации:

Сообщить(СтрокаСоединенияИнформационнойБазы());
// Через веб-сервер: ws="http://srv-1c/trade";
// Клиент-серверный вариант: Srvr="srv-1c";Ref="trade";
// Файловый вариант: File="D:\Bases\Trade";

К адресу публикации останется дописать /ws/ и имя файла публикации, которое назовёт разработчик или покажет файл default.vrd (о нём ниже).

Публикация на IIS и Apache: откуда берётся первая часть адреса

Пока база не опубликована, адреса у веб-сервиса нет вовсе. Конфигуратор лишь описывает сервис, а принимать запросы будет модуль расширения веб-сервера 1С.

Публикация из Конфигуратора

  1. Запустите Конфигуратор от имени администратора Windows: без этого он не сможет записать настройки IIS или файл httpd.conf.
  2. Откройте Администрирование → Публикация на веб-сервере.
  3. В поле Имя задайте имя публикации латиницей, например trade. Это вторая часть URL.
  4. Выберите веб-сервер: Internet Information Services или Apache нужной версии.
  5. Укажите каталог публикации. Для IIS по умолчанию предлагается подпапка в C:\inetpub\wwwroot\.
  6. На вкладке веб-сервисов отметьте флажок публикации веб-сервисов и проверьте список: у каждого сервиса стоит флажок «Публиковать» и указан адрес — имя файла .1cws.
  7. Нажмите Опубликовать. Для Apache после этого перезапустите службу веб-сервера.

Перезапуск службы Apache или пула приложений IIS обрывает текущие веб-сеансы: пользователей веб-клиента выкинет, внешние системы получат ошибки на время перезапуска. Делайте это вне рабочего окна обмена.

Где искать адрес на IIS

Откройте Диспетчер служб IIS (inetmgr). В дереве Сайты → Default Web Site (или другой сайт) найдите приложение или виртуальный каталог с именем публикации. Привязки сайта (Bindings) покажут протокол, порт и имя хоста. Из них собирается начало адреса.

Где искать адрес на Apache

Публикация дописывает блок в httpd.conf. Ищите строки вида:

LoadModule _1cws_module "C:/Program Files/1cv8/8.3.25.1374/bin/wsap24.dll"

# 1c publication
Alias "/trade" "C:/Apache24/htdocs/trade/"
<Directory "C:/Apache24/htdocs/trade/">
    AllowOverride All
    Options None
    Require all granted
    SetHandler 1c-application
    ManagedApplicationDescriptor "C:/Apache24/htdocs/trade/default.vrd"
</Directory>

Значение после Alias — это имя публикации. Порт смотрите в директиве Listen того же файла. Номер версии в пути к модулю у вас будет свой, главное — чтобы он совпадал с установленной платформой.

На Linux модуль называется wsap24.so, а блок публикации обычно лежит в отдельном файле в каталоге конфигураций Apache — ищите по слову ManagedApplicationDescriptor.

Публикация из командной строки

На сервере без графического Конфигуратора используют утилиту webinst из каталога bin платформы:

webinst -publish -apache24 -wsdir trade -dir "C:\Apache24\htdocs\trade" -connstr "Srvr=srv-1c;Ref=trade;" -confpath "C:\Apache24\conf\httpd.conf"

Здесь -wsdir — имя публикации (часть URL), -connstr — к какой базе подключаться. Для IIS вместо -apache24 указывают -iis.

Файл default.vrd и проверка адреса в браузере

Каждая публикация хранит настройки в файле default.vrd в своём каталоге. Это самый надёжный источник правды: он показывает, что реально опубликовано сейчас, а не что задумывал разработчик.

<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       base="/trade"
       ib="Srvr=&quot;srv-1c&quot;;Ref=&quot;trade&quot;;">
  <ws pointEnableCommon="true">
    <point name="Orders" alias="Orders.1cws" enable="true"/>
    <point name="Prices" alias="Prices.1cws" enable="false"/>
  </ws>
</point>

Что читать в файле:

  • ✅ base — имя публикации;
  • ✅ ib — строка подключения к базе, видно сервер и имя базы в кластере;
  • ✅ point name — имя веб-сервиса, alias — имя файла публикации, то есть хвост адреса;
  • ✅ enable="false" — сервис описан, но выключен. По его адресу будет ошибка.

В примере Prices выключен. Его адрес формально существует, но ответа не будет, пока флажок публикации не включат.

Проверка в браузере

Соберите адрес и откройте его с ?wsdl:

http://srv-1c/trade/ws/Orders.1cws?wsdl

Если всё верно, браузер покажет XML с корнем definitions. Внутри ищите:

  • элемент service и вложенный address location=... — это адрес, который сервис сам сообщает клиентам;
  • элементы operation — должны совпасть с операциями из Конфигуратора.

Сравните address location из WSDL с адресом, по которому вы открыли страницу. Если сервер стоит за прокси или балансировщиком, там может оказаться внутреннее имя хоста. Внешняя система возьмёт его из WSDL и не достучится. В этом случае клиенту нужно явно задать адрес точки подключения.

Если база требует авторизацию, браузер спросит логин и пароль. Вводите пользователя 1С, а не учётную запись Windows (кроме случая, когда настроена аутентификация ОС).

Подключение к сервису из другой базы 1С

Когда адрес найден, его проверяют тем же способом, каким будет пользоваться клиент:

Определения = Новый WSОпределения("http://srv-1c/trade/ws/Orders.1cws?wsdl", "Обмен", "Пароль");
Для Каждого Сервис Из Определения.Сервисы Цикл
    Сообщить(Сервис.Имя + " — " + Сервис.URIПространстваИмен);
КонецЦикла;

Если определения прочитались, адрес и права в порядке. Дальше прокси создают через Новый WSПрокси(...) с этим же URI пространства имён и именем сервиса.

Адрес веб-сервиса при работе через кластер серверов

В клиент-серверном варианте внешняя система никогда не обращается к кластеру 1С напрямую. Цепочка такая:

  1. Клиент шлёт SOAP-запрос на веб-сервер по HTTP или HTTPS.
  2. Модуль расширения веб-сервера подключается к кластеру по строке из default.vrd: сначала к агенту сервера (порт 1540), затем к менеджеру кластера (1541) и рабочему процессу.
  3. Рабочий процесс выполняет код модуля веб-сервиса и возвращает ответ.

Отсюда практические выводы:

  • 🖥 Адрес веб-сервиса — это всегда адрес веб-сервера, а не сервера 1С. Порты 1540/1541 в URL не пишут.
  • 🖥 Ref в строке подключения — имя базы в кластере, а не путь к файлам.
  • 🖥 Если веб-сервер и сервер 1С стоят на разных машинах, между ними должны быть открыты порты агента, менеджера и диапазон портов рабочих процессов. Диапазон задаётся в свойствах рабочего сервера в консоли кластера.
  • 🖥 При нескольких веб-серверах за балансировщиком внешний адрес один — адрес балансировщика. Публикации на всех веб-серверах должны называться одинаково, иначе часть запросов уйдёт в 404.

Переименование базы в кластере или перенос на другой сервер не меняет URL сервиса, но ломает строку ib в default.vrd. Внешне адрес тот же, а сервис отвечает ошибкой подключения к базе. После переноса перепубликуйте базу или поправьте строку подключения.

Для файловой базы цепочка короче: модуль веб-сервера открывает файлы базы напрямую. Учётная запись пула IIS или службы Apache должна иметь права на чтение и запись каталога базы.

Ошибки при обращении к веб-сервису и что с ними делать

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

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

Пара проверок, которые снимают половину вопросов ещё до разбора ошибки:

  • 🔍 Откройте корень публикации без /ws/ (http://srv-1c/trade/). Если запускается веб-клиент, веб-сервер и модуль работают, проблема точно в части после /ws/.
  • 🔍 Проверьте разрядность. 64-битная платформа требует, чтобы в пуле IIS параметр включения 32-разрядных приложений был выключен; 32-битная — включён.
  • 🔍 Права на каталог. Группе IIS_IUSRS нужен доступ на чтение к каталогу bin платформы и к каталогу публикации.
  • 🔍 Версия модуля. После обновления платформы публикация продолжает ссылаться на старый каталог bin. Если старую версию удалили, всё перестаёт работать разом. Перепубликуйте базу из Конфигуратора новой версии.

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

Можно ли обратиться к веб-сервису без расширения .1cws?
Обращайтесь по тому адресу, что указан в alias файла default.vrd и в свойстве «Имя файла публикации». Если внешняя система требует красивый адрес без расширения, сделайте перенаправление на стороне веб-сервера.
Где взять HTTPS-адрес веб-сервиса?
1С сертификатами не управляет. Настройте HTTPS на сайте IIS или в Apache (сертификат и привязка к порту 443), после этого тот же адрес работает со схемой https://.
Меняется ли адрес после обновления конфигурации?
Нет, если разработчики не меняли имя файла публикации сервиса. После обновления с новыми веб-сервисами базу нужно перепубликовать, чтобы они появились в default.vrd.
Как узнать адрес, если база опубликована в облаке или у франчайзи?
Попросите у владельца сервера имя публикации и адрес сайта. Имя файла сервиса берётся из Конфигуратора, как и в своей базе. Корень публикации обычно совпадает с адресом, по которому пользователи входят в веб-клиент.
Можно ли опубликовать одну базу под двумя разными адресами?
Да. Сделайте две публикации с разными именами и разными каталогами. Например, одну только для веб-сервисов, другую для веб-клиента. В первой веб-сервисы включены, во второй выключены.