Разработка и отладка программного кода непосредственно на сервере — стандартная практика для программистов 1С. Однако очень часто при попытке подключить отладчик с удаленного рабочего места (например, из дома через VPN или с другого сетевого сегмента) разработчики сталкиваются с неприятной проблемой: локально на сервере отладка работает прекрасно, но на удаленном клиентском компьютере точки останова упорно игнорируются, а серверные вызовы не перехватываются.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем разницу между протоколами отладки TCP и HTTP, а также предоставим пошаговую инструкцию по полной настройке серверной отладки для любых условий работы.
В более ранних версиях платформы «1С:Предприятие» по умолчанию использовался протокол TCP. На первый взгляд, схема кажется простой: в настройках указывается диапазон портов (по умолчанию 1560:1591), системные администраторы открывают эти порты на сервере, и всё должно работать. Но на практике удаленной работы мы сталкиваемся с архитектурным ограничением механизма TCP-отладки, которое называется проблемой обратного вызова (Callback).
Давайте проанализируем, как устанавливается связь при TCP-отладке:
rphost пытается установить обратное входящее соединение на компьютер разработчика.1560:1591 на клиентском компьютере.И именно на третьем шаге схема ломается. Если компьютер разработчика находится за домашним роутером, сетевым экраном (Firewall), NAT или подключен по VPN без специальной маршрутизации, то роутер или локальный брандмауэр Windows на клиентском ПК мгновенно заблокирует эту попытку входящего соединения от сервера 1С. В результате конфигуратор не получает отклик, и серверный код выполняется без остановки.
Начиная с версии платформы 8.3.7, фирма 1С добавила альтернативный и гораздо более надежный механизм — отладку по протоколу HTTP. Этот вариант полностью решает проблему «обратного вызова» благодаря принципиально иной архитектуре взаимодействия.
При использовании HTTP-отладки запускается специальная служба — локальный или выделенный сервер отладки (приложение dbgs.exe). Схема работы выглядит следующим образом:
1550.rphost) также сам подключается к этому серверу отладки (это локальное или исходящее соединение для сервера).Таким образом, больше нет никаких «обратных» входящих вызовов от сервера к клиенту! Все соединения являются исходящими со сторон участников к единой точке — серверу отладки dbgs. Системным администраторам достаточно открыть всего один входящий порт 1550 на сервере 1С, и отладка будет гарантированно работать у всех удаленных разработчиков без настройки их домашних роутеров.
Для того чтобы перевести сервер 1С в режим HTTP-отладки, нам потребуется изменить параметры запуска службы агента сервера «1С:Предприятие».
Для операционной системы Windows:
services.msc) и остановим службу сервера 1С (например, 1C:Enterprise 8.3 Server Agent).regedit.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ и найдем ветку нашей службы 1С (например, 1C:Enterprise 8.3 Server Agent (x86-64)).ImagePath. Он содержит команду запуска службы.-debug -http.Пример исходного значения параметра ImagePath:
"C:\Program Files\1cv8\8.3.22.1709\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
Пример измененного значения с включенной HTTP-отладкой:
"C:\Program Files\1cv8\8.3.22.1709\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -http -d "C:\Program Files\1cv8\srvinfo"
После внесения изменений сохраним параметры реестра и запустим службу сервера 1С заново.
Для операционной системы Linux:
/etc/sysconfig/srv1cv83 или /etc/default/srv1cv83.SRV1CV8_DEBUG и присвоим ему соответствующее значение:
SRV1CV8_DEBUG="-debug -http"
Затем сохраним изменения в файле конфигурации и запустим службу сервера 1С.
Теперь, когда сервер готов принимать подключения по HTTP, настроим рабочее место разработчика:
http://[Имя_или_IP_сервера]:1550.Если после перехода на HTTP-протокол точки останова все равно пролетают мимо, рекомендуем последовательно выполнить следующие проверки:
1. Настройка автоматического подключения в Конфигураторе
Часто разработчики забывают указать, какие именно сеансы должен перехватывать отладчик. В Конфигураторе перейдем в меню Отладка — Подключение.... В открывшемся окне нажмем кнопку Автоматическое подключение и установим флажки напротив интересующих нас типов соединений: «Тонкий клиент», «Фоновые задания», «Внешнее соединение» и т. д. Это критически важно для перехвата кода, выполняемого в фоновых задачах.
2. Проверка разрешения сетевых имен (DNS)
Платформа 1С крайне чувствительна к корректности работы DNS. Если сервер 1С не может сопоставить имя компьютера разработчика с его IP-адресом (или наоборот), отладка может давать сбои. Чтобы исключить эту проблему при HTTP-отладке, в настройках Конфигуратора (в поле «Сервер отладки») рекомендуется указывать именно прямой IP-адрес сервера (например, http://192.168.10.25:1550), а не его сетевое имя.
3. Проверка публикации веб-сервисов и HTTP-сервисов
Если вы пытаетесь отлаживать код, который инициируется внешними HTTP- или SOAP-запросами к базе 1С, опубликованной на веб-сервере (IIS или Apache), обычных настроек конфигуратора будет недостаточно. Нам потребуется отредактировать файл публикации default.vrd, который находится в каталоге публикации на веб-сервере. Откроем этот файл в текстовом редакторе и добавим внутрь тега <point> параметр отладки:
<debug enable="true" protocol="http" url="http://[IP_сервера_отладки]:1550" />
После изменения файла default.vrd обязательно перезапустим службу веб-сервера (IIS или Apache), чтобы новые параметры вступили в силу.
Проделав эти шаги, мы получим стабильную, быструю и полностью независимую от сетевых преград систему отладки, которая позволит комфортно работать над проектами 1С из любой точки мира.