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

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

Разработка HTTP-сервисов в среде 1С:Предприятие 8.3 — задача ответственная, и отсутствие возможности пошаговой отладки кода может превратить процесс в настоящий кошмар. Часто возникает ситуация: сервис опубликован, база работает, запросы уходят и приходят с кодом 200 (для проверки можно использовать тестирование http сервисов), но точка останова в модуле HTTP-сервиса упорно игнорируется. Разберем подробно, почему так происходит и как заставить отладчик работать, особенно в сложных инфраструктурах на базе Linux (CentOS) или при использовании протокола HTTP для отладки.

Шаг 1. Проверяем режим отладки на сервере приложений

Первым делом проанализируем настройки запуска сервера 1С. Без ключа -debug отладка на серверной базе невозможна в принципе. Если ваша база работает под управлением CentOS 7 или другого дистрибутива Linux, настройки хранятся в конфигурационном файле службы.

Рассмотрим процесс включения отладки для Linux по шагам:

  1. Остановим службу сервера 1С: systemctl stop srv1cv83.service.
  2. Перейдем к редактированию файла конфигурации: /etc/sysconfig/srv1cv83.
  3. Найдем и раскомментируем (или добавим) строку: SRV1CV8_DEBUG=1.
  4. Сохраним файл и запустим службу: systemctl start srv1cv83.service.

Важный нюанс: Если после перезапуска отладка не появилась, проверим наличие параметра в реальном процессе. Выполним команду:


ps faux | grep 1C

В строке запуска процесса rphost или ragent мы обязательно должны увидеть флаг -debug. Если его нет, проверьте, не переопределены ли параметры запуска в самом юните systemd по пути /usr/lib/systemd/system/srv1cv83.service. Если вы вносили изменения в файл юнита, не забудьте выполнить systemctl daemon-reload.

Для ОС Windows ситуация аналогична: в реестре или в параметрах службы должен быть указан ключ -debug. Обычно путь выглядит так:

"C:\Program Files\1cv8\8.3.X.XXXX\bin\ragent.exe" -srvc -agent ... -debug

Шаг 2. Выбор протокола отладки: TCP против HTTP

Начиная с современных версий платформы (8.3.14+), 1С поддерживает два протокола отладки. Выясним причину, почему это важно. Традиционный протокол TCP часто блокируется брандмауэрами или некорректно работает, если разработчик и сервер находятся в разных подсетях.

Проанализируем ситуацию: если вы используете новые версии платформы, рекомендуется перейти на протокол HTTP. Для этого выполним следующие действия:

  1. В параметрах запуска сервера добавим флаг -http (рядом с -debug).
  2. В Конфигураторе перейдем в меню Сервис — Параметры — Отладка.
  3. Установим переключатель в положение «Отладка по протоколу HTTP».
  4. В поле «Адрес отладчика» укажем адрес вашего компьютера.

Посмотрим на пример настройки адреса отладчика. Если сервер 1С должен сам найти ваш конфигуратор, введите адрес в формате http://имя_вашего_пк:1560 или http://ваш_ip:1560. Помните, что порт 1560 должен быть открыт на входящие соединения на вашем рабочем компьютере.

Шаг 3. Настройка публикации и файла default.vrd

Часто проблема кроется в настройках публикации на веб-сервере (Apache или IIS). В нем обязательно должны быть разрешены HTTP-сервисы и указан адрес отладки.

Проверим наличие следующих атрибутов в секции httpServices:


<httpServices publishByDefault="true">
    <service name="ИмяВашегоСервиса" rootUrl="my_service" enable="true" reuseSessions="autouse" />
</httpServices>

Также обратим внимание на атрибут debuggerURL в корневом теге point. Если он заполнен как localhost, сервер будет пытаться отлаживать запросы внутри себя. Для удаленной отладки там должен быть адрес вашей рабочей станции.

Если вы используете Apache, выясним еще одну тонкость: параметр ServerName в конфигурации веб-сервера (httpd.conf) должен совпадать с тем именем хоста, по которому вы обращаетесь к сервису. Если вы обращаетесь по IP, а в ServerName прописан localhost, отладка может не «прицепиться».

Шаг 4. Автоматическое подключение предметов отладки

Даже если сервер настроен правильно, Конфигуратор должен знать, что ему нужно перехватывать запросы к HTTP-сервисам. Проделаем следующую операцию:

  1. В Конфигураторе откроем меню Отладка — Подключение...
  2. Нажмем кнопку Настройка...
  3. В списке «Автоматическое подключение» установим флажок напротив пункта «HTTP-сервисы на сервере».
  4. Нажмем «ОК» и убедимся, что в списке доступных предметов отладки появился ваш HTTP-сервис.

Если сервис виден в списке «Доступные предметы отладки», но не переходит в «Подключенные», попробуйте нажать кнопку Подключить принудительно, хотя для HTTP-сервисов автоматический режим является предпочтительным.

Шаг 5. Особенности программного кода и кэширования

Разберем ситуацию, когда все настройки верны, но точка останова все равно не срабатывает. Рассмотрим несколько «подводных камней»:


Функция МойМетод(Запрос)
    // Временная мера для "отлова" сеанса отладчиком
    #Если Сервер Тогда
        // Приостановим выполнение на пару секунд
    #КонецЕсли
    
    // Основная логика
    Ответ = Новый HTTPСервисОтвет(200);
    Возврат Ответ;
КонецФункции

Итоги и рекомендации

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

Если вы работаете на Linux, всегда проверяйте статус SELinux (команда sestatus). Если он включен, он может блокировать исходящие сетевые соединения от процесса rphost к вашему отладчику. Для проверки можно временно перевести его в режим Permissive командой setenforce 0.

При использовании протокола HTTP для отладки, убедитесь, что на сервере запущен процесс dbgs (Debugger Server). Без него отладка по HTTP работать не будет. В Windows он запускается автоматически, в Linux его работу нужно контролировать отдельно в списке процессов.

← На главную