Разработка и Конфигурация · 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, либо через соответствующую настройку при публикации.
<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Опубликуйте HTTP-сервис и проверьте его доступность запросом из браузера
- 2Включите отладку по HTTP (свойства ИБ в кластере или debug="true" в default.vrd)
- 3Поставьте точку останова в обработчике и запустите отладку в конфигураторе
- 4Отправьте тестовый запрос через браузер, Postman или curl
- 5Убедитесь, что отладчик остановился, и пройдите код пошагово, инспектируя объект Запрос
- 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.
Отладка без конфигуратора: логирование и внешние инструменты
Бывают ситуации, когда подключить отладчик нельзя: сервер закрыт политиками безопасности, проблема воспроизводится только под нагрузкой или только у конкретного клиента. В таких случаях выручает логирование. Оборачивайте тело обработчика в попытку/исключение и пишите в журнал регистрации ключевые данные: метод, 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С, длительность запросов к СУБД через технологический журнал и возможные блокировки данных. Частая причина — тяжёлый запрос к базе внутри обработчика без индексов по используемым полям.