Открываем веб-сервис 1С в браузере: публикация, адрес, проверка

· 10 мин

Содержание

Программист написал веб-сервис, обмен с внешней системой не идёт, и первый вопрос: а сервис вообще отвечает? Самый быстрый способ проверить — вызвать веб-сервис 1С из браузера. Вводите адрес вида http://сервер/база/ws/ИмяСервиса?wsdl, и если вместо ошибки пришёл XML с описанием методов, публикация работает.

Есть важная оговорка. Браузер умеет только GET-запросы из адресной строки. SOAP-методы веб-сервисов 1С вызываются через POST, поэтому из браузера вы увидите описание сервиса (WSDL), но сам метод не выполните. Зато HTTP-сервисы 1С с методом GET браузер вызывает целиком, с параметрами и ответом.

Ниже — от публикации базы до разбора кодов ответа. Статья про платформу 8.3 с интерфейсом «Такси»; веб-сервер — IIS на Windows Server 2016 и новее либо Apache.

Что должно быть готово до первого запроса

Три условия, без любого из них браузер получит 404 или 500.

  1. В конфигурации есть сервис: веб-сервис (раздел Общие → Веб-сервисы в дереве конфигурации) или HTTP-сервис (Общие → HTTP-сервисы).
  2. На сервере установлен компонент платформы «Модули расширения веб-серверов». При установке или изменении состава платформы он выбирается отдельно и по умолчанию может быть отключён.
  3. База опубликована на веб-сервере, и публикация включает нужный тип сервисов.

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

Самый простой путь для IIS. Запустите Конфигуратор от имени администратора Windows, иначе веб-сервер не даст записать публикацию.

  1. Откройте Администрирование → Публикация на веб-сервере.
  2. Укажите имя публикации — оно станет частью адреса. Лучше латиницей и без пробелов: buh30, exchange.
  3. Выберите веб-сервер и каталог, куда лягут файлы публикации.
  4. Отметьте, что публикуем: веб-сервисы, HTTP-сервисы, стандартный интерфейс OData. Тонкий и веб-клиент отмечайте, только если они нужны.
  5. В таблице веб-сервисов оставьте галочки у тех сервисов, которые нужны снаружи. В новых публикациях все сервисы по умолчанию не публикуются — это сделано намеренно.
  6. Нажмите Опубликовать.

Если публикация на IIS не создаётся, проверьте, что в Windows включена роль «Веб-сервер (IIS)» и что в пуле приложений выбрана та же разрядность, что у модуля расширения платформы. Несовпадение даёт ошибку 500 ещё до обращения к 1С.

Публикация на Apache

Для Apache (в том числе под Linux) используют утилиту webinst, она лежит рядом с платформой. Пример для Apache 2.4:

webinst -publish -apache24 -wsdir buh30 -dir /var/www/buh30 \
  -connstr "Srvr=srv1c;Ref=buh30;"

Каталог должен существовать, а у пользователя, под которым работает Apache, должны быть права на чтение и запись в него. После публикации перезапустите Apache — иначе конфигурация не подхватится.

Файл default.vrd — что в нём править руками

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

<point name="ExchangeService" alias="exchange" enable="true"/>
<httpServices publishByDefault="false">
  <service name="OrdersAPI" enable="true"/>
</httpServices>

Атрибут alias меняет имя в адресе: сервис ExchangeService откроется по /ws/exchange. А publishByDefault="false" означает, что опубликованы только перечисленные сервисы.

После правки default.vrd не нужно пересоздавать публикацию. Но кеш веб-сервера иногда держит старый вариант — тогда достаточно перезапустить пул приложений IIS. Это оборвёт текущие сеансы тонкого клиента через веб, поэтому делайте в нерабочее время.

Как собрать правильный адрес вызова

Адрес состоит из частей, и каждая отвечает за свой уровень. Ошибка на любом даёт 404.

ЧастьПримерОткуда берётся
Протокол и серверhttp://srv-webимя или IP веб-сервера, при HTTPS — https://
Имя публикации/buh30поле «Имя» при публикации
Тип сервиса/ws или /hsws — веб-сервисы, hs — HTTP-сервисы
Сервис/exchangeимя или alias веб-сервиса; корневой URL HTTP-сервиса
Шаблон и параметры/orders/15шаблон URL внутри HTTP-сервиса

Адрес веб-сервиса (SOAP)

http://srv-web/buh30/ws/exchange?wsdl

Регистр в имени публикации и сервиса различается, особенно на Apache под Linux. Если сервис называется Exchange, а вы ввели exchange — получите 404.

Адрес HTTP-сервиса

Вызывается по схеме публикация/hs/корневой URL/шаблон. Допустим, корневой URL сервиса api, шаблон метода /orders/{Номер}, метод GET:

http://srv-web/buh30/hs/api/orders/15

Значение 15 попадёт в параметр Номер, и обработчик прочитает его из свойства Запрос.ПараметрыURL. Параметры после знака вопроса (?дата=2026-10-01) обработчик читает из Запрос.ПараметрыЗапроса.

Кириллица и пробелы в адресе

Современные браузеры сами кодируют кириллицу в адресной строке, но отправляют её в UTF-8. Если сервис ждёт другую кодировку или вы вставляете адрес в скрипт, закодируйте вручную: пробел превращается в %20, буква «Я» — в %D0%AF. Лучше давать шаблонам и сервисам латинские имена: меньше сюрпризов при переносе на другой сервер.

WSDL: как узнать, какие методы есть у сервиса

Браузер вызвать SOAP-метод не может, но WSDL читать умеет — а это главный справочник интеграции. Откройте адрес с ?wsdl на конце. Chrome и Firefox покажут XML-дерево или текст.

Что искать в документе:

  • 📌 <operation name="…"> — имена методов, которые можно вызывать;
  • 📌 <xs:element name="…"> — параметры и возвращаемые значения с типами;
  • 📌 targetNamespace — пространство имён, оно нужно в SOAP-конверте при вызове из другой системы;
  • 📌 <soap:address location="…"/> — адрес, по которому система будет слать POST.

Последний пункт — частая ловушка. Если веб-сервер стоит за прокси или обращение идёт по другому имени, в location может оказаться внутренний адрес, недоступный снаружи. Внешняя система возьмёт его из WSDL и не достучится. Лечится настройкой имени узла на прокси либо ручной подстановкой адреса в клиенте.

Что делать, если WSDL не открывается

Сверяйте по порядку, от простого к сложному:

  1. Открывается ли стартовая страница публикации http://srv-web/buh30? Нет — проблема в самой публикации или веб-сервере.
  2. Совпадает ли имя сервиса с тем, что в конфигураторе? Нужно учитывать регистр.
  3. Отмечена ли галочка у этого сервиса при публикации и enable="true" в default.vrd?
  4. Корректно ли работает сам сервис? Если в модуле веб-сервиса синтаксическая ошибка, WSDL не сформируется, а сервер ответит ошибкой 500.
Диагностика: выберите симптом

Авторизация: почему браузер просит логин и пароль

Когда вы открываете адрес сервиса в первый раз, браузер показывает системное окно с полями логина и пароля. Это базовая аутентификация (Basic) — по умолчанию именно её использует публикация 1С. Вводите имя пользователя информационной базы и его пароль.

Что нужно знать про авторизацию:

  • 🔐 пользователь должен существовать в списке пользователей базы; пользователи Windows, не добавленные в 1С, не пройдут;
  • 🔐 Basic без HTTPS передаёт пароль открытым текстом (точнее, в кодировке Base64, которая шифрованием не является). В рабочем контуре публикуйте через HTTPS;
  • 🔐 если в публикации включена аутентификация операционной системы, браузер подставит учётную запись Windows автоматически, а окно с паролем не появится;
  • 🔐 завести отдельного пользователя «для интеграции» с минимальными правами лучше, чем пускать внешнюю систему под администратором.

Браузер запоминает введённые данные до закрытия окна. Чтобы проверить сервис под другим пользователем, откройте адрес в режиме инкогнито. Передавать пароль прямо в адресе (http://логин:пароль@сервер/…) современные браузеры блокируют или убирают, поэтому на такую схему не рассчитывайте.

Не оставляйте тестового пользователя с известным паролем на боевой публикации. Веб-сервисы смотрят в интернет, и такие учётные записи подбирают автоматически.

Что вернул сервер: коды ответов и тело

Браузер показывает тело ответа, а код состояния скрыт. Откройте инструменты разработчика (клавиша F12), вкладка Network (в русскоязычном интерфейсе — «Сеть»), и обновите страницу: в списке запросов будет столбец Status.

КодЧто значитЧто проверять
200Всё в порядкеСодержимое ответа
401Нужна авторизация или она не пройденаЛогин, пароль, способ аутентификации
403Доступ запрещёнПрава пользователя, ограничения на веб-сервере
404Адрес не найденИмя публикации, регистр, шаблон URL
405Метод не поддерживаетсяУ HTTP-сервиса нет обработчика для GET по этому шаблону
500Ошибка на стороне сервераЖурнал регистрации 1С, журнал веб-сервера

Ответ HTTP-сервиса

Формат тела задаёт разработчик сервиса. Это может быть JSON, XML или простой текст. Браузеры красиво отображают JSON (Firefox — с разбором в дерево, Chrome — как текст), XML — деревом. Если вместо кириллицы вы видите «кракозябры», проверьте, какую кодировку и заголовок Content-Type выставляет обработчик. Для JSON обычно указывают application/json; charset=utf-8.

Как найти причину ошибки 500

Сообщение в браузере почти всегда общее. Подробности ищите на сервере:

  • в журнале регистрации 1С (в Конфигураторе: Администрирование → Журнал регистрации) — фильтр по пользователю, которым шёл запрос;
  • в журналах IIS (каталог inetpub\logs\LogFiles) или Apache (error.log);
  • в технологическом журнале сервера 1С, если ошибка возникает до выполнения кода.

В журнале регистрации ищите события с уровнем «Ошибка» за момент запроса. Текст ошибки обработчика там приводится полностью, с номером строки модуля.

Чего не умеет браузер и чем его заменить

Адресная строка — это GET. Для остального нужен инструмент, который отправляет произвольные запросы. Что выбрать:

Что вам нужно проверить?

curl

Стоит в Windows 10 и новее, в Linux и macOS. Пример GET с авторизацией:

curl -u integration:Пароль "http://srv-web/buh30/hs/api/orders/15"

Для POST с JSON добавьте тело и заголовок:

curl -u integration:Пароль -X POST \
  -H "Content-Type: application/json; charset=utf-8" \
  -d '{"Номер":"15"}' \
  "http://srv-web/buh30/hs/api/orders"

Ключ -v показывает заголовки запроса и ответа вместе с кодом состояния — удобно для отладки.

Postman и SoapUI

Postman подходит для HTTP-сервисов: коллекции запросов, переменные окружения, сохранённая авторизация. SoapUI умеет загрузить WSDL и сам построит заготовку SOAP-конверта для каждого метода — вам остаётся подставить значения параметров.

Вызов из самой 1С

Если сервис нужно проверить прямо из конфигурации, подойдёт связка HTTPСоединение и HTTPЗапрос. Для HTTP-сервиса:

Соединение = Новый HTTPСоединение("srv-web", 80, "integration", "Пароль");
Запрос = Новый HTTPЗапрос("/buh30/hs/api/orders/15");
Ответ = Соединение.Получить(Запрос);
Сообщить(Ответ.КодСостояния);
Сообщить(Ответ.ПолучитьТелоКакСтроку());

Для вызова SOAP-метода используют WSОпределения и WSПрокси: по адресу WSDL строится прокси-объект, у которого методы сервиса вызываются как обычные функции.

Если сервис всё равно не отвечает

Короткий порядок диагностики, когда ничего из описанного не помогло:

  1. Проверьте с самого веб-сервера: откройте адрес в браузере на нём же. Работает локально, но не с другой машины — виноват брандмауэр или привязка сайта к имени/порту.
  2. Проверьте связку веб-сервер → сервер 1С. Если стартовая страница публикации не открывается, а в строке подключения указан неверный сервер или имя базы, сервис не поднимется.
  3. Сравните версии: платформа, с которой публиковали, и платформа на сервере 1С должны совпадать по номеру релиза. После обновления платформы публикацию нужно создать заново.
  4. Откройте тот же адрес из браузера на другом компьютере и под другим пользователем. Так вы отделите проблему сервиса от проблемы окружения.
  5. Попросите разработчика проверить, что последняя версия конфигурации действительно загружена в рабочую базу, а не только в копию.
Можно ли из браузера вызвать SOAP-метод веб-сервиса 1С?
Нет, не через адресную строку. SOAP требует POST с XML-конвертом. В браузере откроется только WSDL; для вызова метода используйте SoapUI, Postman или код на стороне 1С.
Почему браузер просит пароль при каждом открытии сервиса?
Работает базовая аутентификация, и браузер не запомнил данные или пароль введён неверно. Закройте все окна браузера и откройте адрес заново, либо проверьте пользователя в списке пользователей базы.
Как открыть сервис по HTTPS, если сертификат самоподписанный?
Браузер покажет предупреждение, и его придётся подтвердить вручную. Внешние системы и скрипты так не сделают, поэтому на рабочем сервере ставьте сертификат от доверенного центра.
Можно ли сделать так, чтобы в адресе был не `/ws/`, а свой путь?
Имя сервиса меняют через атрибут alias в default.vrd. Сегмент /ws/ и /hs/ остаётся неизменным — он определяет тип сервиса.
Нужен ли отдельный веб-сервер для сервисов?
Нет. Тот же IIS или Apache, что публикует веб-клиент, обслуживает и сервисы. Но для боевого обмена удобно сделать отдельную публикацию с набором сервисов и отдельным пользователем.