Почему не срабатывает точка останова при отладке HTTP-сервисов в 1С и как это исправить

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

В рамках этой статьи мы подробно проанализируем, почему возникает такое поведение системы, разберем ключевые сетевые нюансы взаимодействия конфигуратора и сервера приложений, а также составим пошаговую инструкцию по переходу на современный и стабильный протокол отладки по HTTP. Дополнительно мы рассмотрим методы устранения популярной сопутствующей ошибки HTTP 404.0 - Not Found.

Почему предмет отладки «появляется и исчезает», а точка останова не срабатывает?

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

В этот момент сервер 1С мгновенно создает специальный фоновый сеанс для обработки конкретного HTTP-запроса. Если в конфигураторе включено автоматическое подключение фоновых заданий, отладчик регистрирует появление нового сеанса — именно этот момент вы видите в списке предметов отладки. Однако выполнение программного кода HTTP-сервиса обычно занимает доли секунды. Как только код выполнен, сеанс завершается и исчезает из списка. Конфигуратор физически не успевает «захватить» этот кратковременный процесс.

Выделим две основные причины, почему конфигуратор не успевает вовремя подключиться к сеансу при использовании классической схемы отладки по протоколу TCP/IP:

  1. Блокировка входящих соединений брандмауэром на компьютере разработчика. При классической отладке по TCP/IP инициатором обратного соединения выступает сервер приложений 1С (процесс rphost). Он пытается подключиться к запущенному на вашем компьютере конфигуратору по случайному порту из диапазона 1560–1591. Если на вашем рабочем месте включен брандмауэр Windows или локальный антивирус с сетевым экраном, это входящее соединение блокируется. В результате сервер выполняет код без остановки, а конфигуратор так и остается в режиме ожидания.
  2. Наличие нескольких рабочих процессов в кластере 1С. Если на сервере 1С запущено несколько процессов rphost, ваш конфигуратор может быть подключен к одному рабочему процессу, а входящий HTTP-запрос примет и обработает совершенно другой процесс. В такой ситуации перехват точки останова также не произойдет.

Как решить проблему при использовании классической TCP/IP отладки

Если по каким-то причинам вы обязаны использовать старый протокол TCP/IP, выполните следующие шаги для локализации проблемы:

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

Шаг 2. Ограничение количества рабочих процессов. На время проведения отладки в консоли администрирования кластера серверов 1С временно установите параметры работы так, чтобы активным оставался ровно один рабочий процесс rphost. Это гарантирует, что и ваш конфигуратор, и отлаживаемый веб-сеанс будут находиться в одном адресном пространстве.

Переход на современную и надежную отладку по протоколу HTTP

Начиная с версии платформы 8.3.7, фирма «1С» реализовала принципиально новый механизм — отладку по протоколу HTTP. Вместо прямой связи между сервером 1С и конфигуратором разработчика используется промежуточное звено — локальный или выделенный сервер отладки (служба dbgs). Этот способ полностью решает проблемы с сетевыми экранами и маршрутизацией сообщений.

Рассмотрим по шагам, как правильно настроить отладку по HTTP на серверной базе:

Шаг 1. Настройка параметров службы сервера 1С.

Нам необходимо запустить службу сервера 1С в режиме отладки с указанием протокола HTTP. Для этого на сервере приложений откройте редактор реестра Windows (regedit) и перейдите по следующему пути:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent...

Найдите параметр ImagePath. По умолчанию он выглядит примерно так:

"C:\Program Files\1cv8\8.3.10.2168\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"

Вам необходимо отредактировать этот параметр, добавив в конец ключи -debug -http. Строка должна принять следующий вид:

"C:\Program Files\1cv8\8.3.10.2168\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug -http

После изменения параметров в реестре обязательно перезапустите службу «Агент сервера 1С:Предприятия» через панель управления службами Windows.

Шаг 2. Настройка параметров отладки в Конфигураторе.

Запустите конфигуратор вашей информационной базы и выполните следующие действия:

  1. Откройте меню Сервис — Параметры и перейдите на вкладку Отладка.
  2. В группе «Протокол отладки» переключите переключатель с «TCP/IP» на HTTP.
  3. Поле «Адрес локального сервера отладки» заполнится автоматически (например, http://ИмяВашегоКомпьютера:1561). Скопируйте это значение в буфер обмена — оно понадобится нам на следующем шаге.

Шаг 3. Настройка и обновление публикации на веб-сервере.

Теперь нужно сообщить веб-серверу, куда именно отправлять информацию для отладчика:

  1. Откройте меню Администрирование — Публикация на веб-сервере.
  2. Перейдите на вкладку Прочие.
  3. В секции «Отладка» установите значение Разрешена (протокол HTTP).
  4. В поле «Адрес сервера отладки» вставьте ранее скопированный URL (например, http://ИмяВашегоКомпьютера:1561).
  5. Нажмите кнопку Опубликовать для обновления файлов конфигурации веб-сервера.

Шаг 4. Ручная проверка файла конфигурации публикации.

Иногда конфигуратор обновляет настройки некорректно. Рекомендуем проверить файл настроек публикации вручную. Перейдите в физический каталог публикации (например, C:\inetpub\wwwroot\MyBase\ для IIS или соответствующую папку в Apache) и откройте файл default.vrd с помощью любого текстового редактора. Найдите в нем узел, отвечающий за дебаг. Он должен выглядеть строго следующим образом:

<debug enable="true" protocol="http" url="http://ИмяВашегоКомпьютера:1561" />

Если параметр enable установлен в значение false или указан старый протокол tcp, отредактируйте строку вручную и сохраните файл.

Шаг 5. Перезапуск веб-сервера.

Для того чтобы веб-сервер применил новые параметры из файла default.vrd, обязательно выполните полную перезагрузку его службы. Для IIS выполните команду iisreset в командной строке, запущенной от имени администратора. Для Apache перезапустите соответствующую службу в панели управления Windows.

Устранение ошибки «HTTP 404.0 - Not Found» при обращении к HTTP-сервису

Бывают ситуации, когда веб-сервер возвращает клиенту ошибку 404. Это означает, что сам веб-сервер работает и базу видит, но не может сопоставить пришедший URL-адрес с конкретным HTTP-сервисом в метаданных 1С. Выясним основные причины этой ошибки и методы их устранения:

Причина №1: Неверный формат URL-адреса.
Для всех HTTP-сервисов в платформе 1С жестко определен единый шаблон формирования адреса. Шаблон выглядит так:
http://<ИмяСервера>/<ИмяПубликации>/hs/<КорневойURLСервиса>/<ОтносительныйПутьШаблона>
Разработчики очень часто забывают указать обязательный сегмент /hs/ (сокращение от HTTP Service). Без него веб-сервер пытается найти физическую веб-страницу в каталоге публикации и логично возвращает ошибку 404.

Причина №2: Регистрозависимость путей.
Если ваш веб-сервер работает под управлением операционной системы Linux (веб-сервер Apache), или на IIS включены жесткие правила фильтрации запросов, регистр букв в адресе имеет критическое значение. Адрес .../hs/my_service/... и адрес .../hs/My_Service/... для системы будут абсолютно разными путями. Проверьте посимвольное совпадение имени публикации, корневого URL сервиса и шаблона путей в конфигураторе 1С с тем адресом, по которому вы отправляете запрос.

Причина №3: Кэширование структуры веб-сервером.
Если вы только что добавили новый HTTP-сервис в конфигурацию, настроили для него шаблоны путей и выполнили обновление конфигурации базы данных, веб-сервер может продолжать использовать старый кэш структуры метаданных. Всегда выполняйте принудительный перезапуск веб-сервера (IIS или Apache) после добавления или изменения структуры HTTP-сервисов в вашей базе.

← На главную