Откуда берётся URL веб-сервиса 1С и где его найти на сервере
Содержание
Адрес веб-сервиса 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/.
- Откройте базу в режиме
Конфигуратор. - Откройте дерево конфигурации:
Конфигурация → Открыть конфигурацию. - Разверните ветку
Общие → Web-сервисы. - Выделите нужный сервис и откройте его свойства (
Alt+Enterили двойной щелчок). - Найдите свойство
Имя файла публикации. Это и есть последняя часть адреса, например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С.
Публикация из Конфигуратора
- Запустите Конфигуратор от имени администратора Windows: без этого он не сможет записать настройки IIS или файл
httpd.conf. - Откройте
Администрирование → Публикация на веб-сервере. - В поле
Имязадайте имя публикации латиницей, напримерtrade. Это вторая часть URL. - Выберите веб-сервер: Internet Information Services или Apache нужной версии.
- Укажите каталог публикации. Для IIS по умолчанию предлагается подпапка в
C:\inetpub\wwwroot\. - На вкладке веб-сервисов отметьте флажок публикации веб-сервисов и проверьте список: у каждого сервиса стоит флажок «Публиковать» и указан адрес — имя файла
.1cws. - Нажмите
Опубликовать. Для 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="srv-1c";Ref="trade";">
<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С напрямую. Цепочка такая:
- Клиент шлёт SOAP-запрос на веб-сервер по HTTP или HTTPS.
- Модуль расширения веб-сервера подключается к кластеру по строке из
default.vrd: сначала к агенту сервера (порт 1540), затем к менеджеру кластера (1541) и рабочему процессу. - Рабочий процесс выполняет код модуля веб-сервиса и возвращает ответ.
Отсюда практические выводы:
- 🖥 Адрес веб-сервиса — это всегда адрес веб-сервера, а не сервера 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. Если старую версию удалили, всё перестаёт работать разом. Перепубликуйте базу из Конфигуратора новой версии.