Разработка HTTP-сервисов в среде 1С:Предприятие 8.3 — задача ответственная, и отсутствие возможности пошаговой отладки кода может превратить процесс в настоящий кошмар. Часто возникает ситуация: сервис опубликован, база работает, запросы уходят и приходят с кодом 200 (для проверки можно использовать тестирование http сервисов), но точка останова в модуле HTTP-сервиса упорно игнорируется. Разберем подробно, почему так происходит и как заставить отладчик работать, особенно в сложных инфраструктурах на базе Linux (CentOS) или при использовании протокола HTTP для отладки.
Первым делом проанализируем настройки запуска сервера 1С. Без ключа -debug отладка на серверной базе невозможна в принципе. Если ваша база работает под управлением CentOS 7 или другого дистрибутива Linux, настройки хранятся в конфигурационном файле службы.
Рассмотрим процесс включения отладки для Linux по шагам:
systemctl stop srv1cv83.service./etc/sysconfig/srv1cv83.SRV1CV8_DEBUG=1.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
Начиная с современных версий платформы (8.3.14+), 1С поддерживает два протокола отладки. Выясним причину, почему это важно. Традиционный протокол TCP часто блокируется брандмауэрами или некорректно работает, если разработчик и сервер находятся в разных подсетях.
Проанализируем ситуацию: если вы используете новые версии платформы, рекомендуется перейти на протокол HTTP. Для этого выполним следующие действия:
-http (рядом с -debug).Посмотрим на пример настройки адреса отладчика. Если сервер 1С должен сам найти ваш конфигуратор, введите адрес в формате http://имя_вашего_пк:1560 или http://ваш_ip:1560. Помните, что порт 1560 должен быть открыт на входящие соединения на вашем рабочем компьютере.
Часто проблема кроется в настройках публикации на веб-сервере (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, отладка может не «прицепиться».
Даже если сервер настроен правильно, Конфигуратор должен знать, что ему нужно перехватывать запросы к HTTP-сервисам. Проделаем следующую операцию:
Если сервис виден в списке «Доступные предметы отладки», но не переходит в «Подключенные», попробуйте нажать кнопку Подключить принудительно, хотя для HTTP-сервисов автоматический режим является предпочтительным.
Разберем ситуацию, когда все настройки верны, но точка останова все равно не срабатывает. Рассмотрим несколько «подводных камней»:
Замер производительности перед выполнением запроса. Если после завершения запроса замер пустой — отладка не видит сеанс. Если данные есть — проблема в визуализации точки останова.
Функция МойМетод(Запрос)
// Временная мера для "отлова" сеанса отладчиком
#Если Сервер Тогда
// Приостановим выполнение на пару секунд
#КонецЕсли
// Основная логика
Ответ = Новый HTTPСервисОтвет(200);
Возврат Ответ;
КонецФункции
Подводя итог, отметим, что для успешной отладки HTTP-сервисов необходимо обеспечить «прозрачность» соединения между тремя точками: Клиент (Postman/другая база) — Веб-сервер (Apache/IIS) — Сервер 1С — Конфигуратор.
Если вы работаете на Linux, всегда проверяйте статус SELinux (команда sestatus). Если он включен, он может блокировать исходящие сетевые соединения от процесса rphost к вашему отладчику. Для проверки можно временно перевести его в режим Permissive командой setenforce 0.
При использовании протокола HTTP для отладки, убедитесь, что на сервере запущен процесс dbgs (Debugger Server). Без него отладка по HTTP работать не будет. В Windows он запускается автоматически, в Linux его работу нужно контролировать отдельно в списке процессов.