К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как отладить HTTP-сервис в 1С 8.3

Как отладить HTTP-сервис в 1С 8.3: настройка публикации, отладка на сервере и клиенте, типичные ошибки 404 и 500, проверка запросов и журнала регистрации.

HTTP-сервисы в 1С 8.3 позволяют принимать внешние запросы и отдавать данные из информационной базы без прямого подключения к ней. Однако отладка таких сервисов отличается от обычной отладки кода: запрос приходит извне, код исполняется на стороне сервера или веб-сервера, и стандартный запуск отладчика из конфигуратора не всегда перехватывает нужный сеанс.

Основная сложность в том, что HTTP-сервис исполняется в отдельном сеансе, который создаётся веб-сервером (IIS или Apache) в момент обращения. Чтобы отладчик 1С «подцепил» этот сеанс, нужно правильно настроить публикацию, включить отладку по HTTP и убедиться, что конфигуратор и сервер используют один и тот же механизм подключения.

Ниже разобран рабочий порядок действий: от публикации сервиса до пошагового прохождения кода, а также разбор типичных ошибок — 404, 500, отсутствие остановки на точке останова — и способы диагностики через журнал регистрации и внешние инструменты.

Как устроено исполнение HTTP-сервиса и почему обычная отладка не работает

Когда внешний клиент отправляет запрос на URL опубликованного сервиса, веб-сервер передаёт его расширению веб-сервера 1С, которое создаёт (или переиспользует) сеанс в кластере серверов 1С. Код обработчика — функции из модуля HTTP-сервиса — выполняется внутри этого сеанса. Из конфигуратора вы этот сеанс не видите, пока явно не включите отладку по протоколу HTTP.

Вторая особенность: для файловой базы, опубликованной на веб-сервере, и для клиент-серверной базы механика отличается. В файловом варианте код исполняется в процессе веб-сервера (например, w3wp.exe у IIS или httpd.exe у Apache), в клиент-серверном — в рабочем процессе rphost кластера. Отладчик должен подключиться именно к тому процессу, где исполняется код.

Подготовка: публикация и включение отладки по HTTP

Сначала убедитесь, что HTTP-сервис опубликован. Откройте в конфигураторе «Администрирование → Публикация на веб-сервере», выберите веб-сервер, укажите имя публикации и на вкладке «HTTP-сервисы» отметьте нужные сервисы флажком «Публиковать». После публикации проверьте доступность сервиса простым GET-запросом из браузера — вы должны получить ответ (даже ошибку 405 или 500 лучше, чем 404: это значит, что маршрутизация до 1С работает).

Далее включите отладку по HTTP. Для клиент-серверной базы это делается в консоли кластера: свойства информационной базы → флажок «Отладка по HTTP» (или запуск сервера 1С с параметрами -debug -http). Для файловой базы, опубликованной на веб-сервере, отладка включается через параметр в файле default.vrd — атрибут debug="true" у элемента point, либо через соответствующую настройку при публикации.

xml
<point name="MyHttpService" alias="hs.1cws" enable="true" reuseSessions="autouse" sessionMaxAge="20" poolSize="10" poolTimeout="5" debug="true"/>

Обратите внимание на параметр reuseSessions: если переиспользование сеансов включено, запросы могут попадать в уже существующий сеанс, что удобно для отладки (сеанс живёт дольше и отладчик успевает подключиться), но может маскировать ошибки инициализации. На время отладки разумно оставить режим autouse, а при диагностике проблем создания сеанса — временно отключить переиспользование.

Пошаговая отладка обработчика запроса

После включения отладки по HTTP откройте конфигуратор, поставьте точку останова в обработчике шаблона URL (например, в функции ПолучитьДанныеGET модуля HTTP-сервиса) и запустите отладку: «Отладка → Начать отладку». Затем откройте «Отладка → Подключение» и проверьте список доступных предметов отладки — после первого входящего запроса там должен появиться сеанс с типом «HTTP-сервис».

Теперь отправьте тестовый запрос. Для GET достаточно браузера; для POST/PUT/DELETE удобнее Postman, Insomnia или curl. Когда запрос дойдёт до исполнения, отладчик остановится на точке останова, и вы сможете пошагово пройти код, посмотреть параметры запроса, заголовки и тело через объект Запрос (HTTPСервисЗапрос).

Порядок действий
  1. 1
    Опубликуйте HTTP-сервис и проверьте его доступность запросом из браузера
  2. 2
    Включите отладку по HTTP (свойства ИБ в кластере или debug="true" в default.vrd)
  3. 3
    Поставьте точку останова в обработчике и запустите отладку в конфигураторе
  4. 4
    Отправьте тестовый запрос через браузер, Postman или curl
  5. 5
    Убедитесь, что отладчик остановился, и пройдите код пошагово, инспектируя объект Запрос
  6. 6
    После отладки выключите отладку по HTTP на рабочем сервере

Если точка останова не срабатывает, чаще всего причина одна из трёх: отладка по HTTP не включена, отладчик подключён не к тому сеансу, либо запрос вообще не доходит до 1С (ошибка на уровне веб-сервера). Проверяйте в этом порядке.

Контрольные точки

Как проверить результат

Сеанс в окне подключения отладчика
Норма

После запроса появляется сеанс типа «HTTP-сервис»

Тревожный признак

Список пуст — отладка по HTTP не включена или запрос не доходит до 1С

Ответ на тестовый запрос
Норма

Код 200 и ожидаемое тело ответа

Тревожный признак

404 — сервис не опубликован или неверный URL шаблона; 500 — исключение в коде

Точка останова
Норма

Остановка на строке обработчика

Тревожный признак

Запрос выполняется без остановки — проверьте, что конфигурация в отладчике совпадает с опубликованной

Диагностика типичных ошибок: 404, 500, пустой ответ

Ошибка 404 означает, что веб-сервер не нашёл обработчик по указанному URL. Проверьте: опубликован ли сервис (флажок в настройках публикации), совпадает ли имя публикации в URL, корректен ли шаблон URL в свойствах HTTP-сервиса (например, /api/* или /orders/{id}). Помните, что корневой URL сервиса задаётся свойством «Корневой URL», а шаблоны добавляются к нему.

Ошибка 500 говорит об исключении в коде обработчика. Текст исключения обычно возвращается в теле ответа, но в продуктивной публикации может быть скрыт. Надёжный способ увидеть причину — журнал регистрации: откройте его в конфигураторе или через выгрузку и отфильтруйте по событию HTTP-сервиса и уровню «Ошибка». Там будет полный стек вызова и текст исключения.

Отдельный случай — пустой ответ или обрыв соединения. Так бывает при тайм-ауте веб-сервера (долгий запрос к данным), падении рабочего процесса или превышении лимита памяти. Проверьте длительность выполнения запроса и настройки тайм-аутов IIS/Apache, а также посмотрите технологический журнал кластера на предмет аварийного завершения rphost.

Типичные ошибки
01
Отладка в конфигураторе без включения отладки по HTTP — точки останова в HTTP-сервисе просто игнорируются
02
Проверка неверного URL: путают корневой URL сервиса и шаблон URL, получают 404 и ищут ошибку в коде
03
Отладка копии конфигурации, отличающейся от опубликованной — остановка происходит не на тех строках или не происходит вовсе
04
Оставленная включённой отладка по HTTP на продуктивном сервере — снижение производительности и потенциальная уязвимость
05
Игнорирование журнала регистрации при ошибке 500 — причина ищется вслепую перебором кода

Отладка без конфигуратора: логирование и внешние инструменты

Бывают ситуации, когда подключить отладчик нельзя: сервер закрыт политиками безопасности, проблема воспроизводится только под нагрузкой или только у конкретного клиента. В таких случаях выручает логирование. Оборачивайте тело обработчика в попытку/исключение и пишите в журнал регистрации ключевые данные: метод, URL, заголовки, идентификаторы объектов, текст ошибки с полным описанием через ОписаниеОшибки() и ПодробноеПредставлениеОшибки.

Для анализа входящих запросов на стороне веб-сервера включите логирование IIS или Apache — по ним видно, дошёл ли запрос до сервера, какой код вернулся и сколько времени заняла обработка. Для глубокой диагностики на стороне 1С используйте технологический журнал с событиями EXCP (исключения) и DBMSSQL/DBPOSTGRS (запросы к СУБД), если подозреваете проблему в обращении к данным.

Удобный приём — добавить в HTTP-сервис отладочный метод (например, GET /ping), который возвращает версию конфигурации и время сервера. Он позволяет за секунды отличить проблему публикации от проблемы в бизнес-логике и проверить, что на сервере развёрнута именно та версия кода, которую вы отлаживаете.
ПЗ
Практическое замечание

Особенности клиент-серверного и файлового вариантов

В клиент-серверном варианте отладка по HTTP включается централизованно через консоль кластера, и отладчик подключается к рабочему процессу rphost. Учтите: если в кластере несколько рабочих процессов, сеанс HTTP-сервиса может оказаться в любом из них — отладчик 1С подключается к кластеру целиком, поэтому это не проблема, но при включённой отладке производительность всех процессов снижается.

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

Проверка результата и завершение отладки

После исправления кода повторите полный сценарий: отправьте запрос, который раньше вызывал ошибку, и убедитесь, что возвращается ожидаемый код ответа и корректное тело. Проверьте граничные случаи — запрос без обязательных параметров, с неверным типом данных, с большим телом. Хороший обработчик должен возвращать осмысленные коды 400/404/500 с понятным описанием, а не падать с необработанным исключением.

Завершая работу, отключите отладку по HTTP, снимите точки останова и перезапустите публикацию (или рабочие процессы), чтобы изменения вступили в силу. Убедитесь по журналу регистрации, что новых ошибок в событиях HTTP-сервиса не появляется.

Итог

Что важно запомнить

HTTP-сервис отлаживается только при включённой отладке по HTTP и подключении отладчика к сеансу сервиса. Ошибку 404 ищите в публикации и шаблонах URL, ошибку 500 — в журнале регистрации. На продуктиве отладку отключайте, заменяя её логированием исключений.

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

Почему точка останова в модуле HTTP-сервиса не срабатывает?

Чаще всего не включена отладка по HTTP (флажок в свойствах ИБ кластера или debug="true" в default.vrd). Также проверьте, что отлаживаемая конфигурация совпадает с опубликованной, и что запрос реально доходит до 1С — об этом скажет любой ответ, отличный от 404.

Можно ли отладить HTTP-сервис в файловой базе без веб-сервера?

Нет, HTTP-сервис работает только через публикацию на веб-сервере (IIS или Apache). Альтернатива для быстрой проверки логики — вынести код обработчика в общий модуль и вызвать его из обычного приложения, передав тестовые параметры вручную.

Как увидеть текст ошибки при ответе 500 без отладчика?

Откройте журнал регистрации и отфильтруйте события с уровнем «Ошибка» за нужный период — там будет полное представление исключения. Дополнительно можно обернуть код обработчика в Попытка/Исключение и возвращать текст ошибки в теле ответа на тестовом контуре.

Чем отправлять POST-запросы для тестирования?

Подойдут Postman, Insomnia или утилита curl. Они позволяют задавать заголовки (Content-Type, Authorization), тело запроса и сохранять коллекции тестовых запросов для повторной проверки после исправлений.

Влияет ли включённая отладка по HTTP на работу пользователей?

Да. Режим отладки замедляет исполнение кода на сервере и увеличивает нагрузку. На продуктивном сервере включайте его только на время диагностики и обязательно отключайте после завершения.

Запрос выполняется долго и обрывается — где искать причину?

Проверьте тайм-ауты веб-сервера и кластера 1С, длительность запросов к СУБД через технологический журнал и возможные блокировки данных. Частая причина — тяжёлый запрос к базе внутри обработчика без индексов по используемым полям.