Открываем веб-сервис 1С в браузере: публикация, адрес, проверка
Содержание
Программист написал веб-сервис, обмен с внешней системой не идёт, и первый вопрос: а сервис вообще отвечает? Самый быстрый способ проверить — вызвать веб-сервис 1С из браузера. Вводите адрес вида http://сервер/база/ws/ИмяСервиса?wsdl, и если вместо ошибки пришёл XML с описанием методов, публикация работает.
Есть важная оговорка. Браузер умеет только GET-запросы из адресной строки. SOAP-методы веб-сервисов 1С вызываются через POST, поэтому из браузера вы увидите описание сервиса (WSDL), но сам метод не выполните. Зато HTTP-сервисы 1С с методом GET браузер вызывает целиком, с параметрами и ответом.
Ниже — от публикации базы до разбора кодов ответа. Статья про платформу 8.3 с интерфейсом «Такси»; веб-сервер — IIS на Windows Server 2016 и новее либо Apache.
Что должно быть готово до первого запроса
Три условия, без любого из них браузер получит 404 или 500.
- В конфигурации есть сервис: веб-сервис (раздел
Общие → Веб-сервисыв дереве конфигурации) или HTTP-сервис (Общие → HTTP-сервисы). - На сервере установлен компонент платформы «Модули расширения веб-серверов». При установке или изменении состава платформы он выбирается отдельно и по умолчанию может быть отключён.
- База опубликована на веб-сервере, и публикация включает нужный тип сервисов.
Публикация через Конфигуратор
Самый простой путь для IIS. Запустите Конфигуратор от имени администратора Windows, иначе веб-сервер не даст записать публикацию.
- Откройте
Администрирование → Публикация на веб-сервере. - Укажите имя публикации — оно станет частью адреса. Лучше латиницей и без пробелов:
buh30,exchange. - Выберите веб-сервер и каталог, куда лягут файлы публикации.
- Отметьте, что публикуем: веб-сервисы, HTTP-сервисы, стандартный интерфейс OData. Тонкий и веб-клиент отмечайте, только если они нужны.
- В таблице веб-сервисов оставьте галочки у тех сервисов, которые нужны снаружи. В новых публикациях все сервисы по умолчанию не публикуются — это сделано намеренно.
- Нажмите
Опубликовать.
Если публикация на 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 или /hs | ws — веб-сервисы, 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 не открывается
Сверяйте по порядку, от простого к сложному:
- Открывается ли стартовая страница публикации
http://srv-web/buh30? Нет — проблема в самой публикации или веб-сервере. - Совпадает ли имя сервиса с тем, что в конфигураторе? Нужно учитывать регистр.
- Отмечена ли галочка у этого сервиса при публикации и
enable="true"вdefault.vrd? - Корректно ли работает сам сервис? Если в модуле веб-сервиса синтаксическая ошибка, 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С. Если стартовая страница публикации не открывается, а в строке подключения указан неверный сервер или имя базы, сервис не поднимется.
- Сравните версии: платформа, с которой публиковали, и платформа на сервере 1С должны совпадать по номеру релиза. После обновления платформы публикацию нужно создать заново.
- Откройте тот же адрес из браузера на другом компьютере и под другим пользователем. Так вы отделите проблему сервиса от проблемы окружения.
- Попросите разработчика проверить, что последняя версия конфигурации действительно загружена в рабочую базу, а не только в копию.
Можно ли из браузера вызвать SOAP-метод веб-сервиса 1С?
Почему браузер просит пароль при каждом открытии сервиса?
Как открыть сервис по HTTPS, если сертификат самоподписанный?
Можно ли сделать так, чтобы в адресе был не `/ws/`, а свой путь?
alias в default.vrd. Сегмент /ws/ и /hs/ остаётся неизменным — он определяет тип сервиса.