Разработка и отладка HTTP-сервисов в 1С:Предприятие нередко вызывают сложности. Разработчики часто сталкиваются с ситуацией, когда при установленном флаге HTTP-сервисы на сервере отладчик игнорирует входящие вызовы или перехватывает сеанс только через флаг Клиентские и внешние соединения на сервере как обычный сеанс с типом Сервер. Кроме того, точка останова в самом начале обработчика запроса может не срабатывать, из-за чего часть алгоритма выполняется до подключения отладчика.
Разберем подробно причины такого поведения платформы и пошагово настроим стабильную отладку HTTP-сервисов.
Проанализируем, почему Конфигуратор может не определять сеанс веб-вызова как специализированный HTTP-сервис:
Сервер. В этом случае специализированный флаг HTTP-сервисы на сервере не может перехватить входящий поток, и отладка становится возможной только при включении общего флага Клиентские и внешние соединения на сервере.rphost как внешнее серверное подключение под пользователем, указанным в файле публикации, без явной детализации типа сервиса.Для корректного подключения отладчика к опубликованной информационной базе необходимо убедиться, что в файле default.vrd присутствует и правильно заполнена секция debug.
Посмотрим на пример конфигурации файла default.vrd для протокола TCP/IP:
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/my_service"
ib="Srvr="test1c:1641";Ref="alf";Usr=Backup;">
<debug enable="true"
protocol="tcp"
url="tcp://localhost"/>
<httpService name="МойСервис"
rootUrl="api"
enable="true"/>
</point>
Разберем ключевые параметры настройки:
true.tcp://localhost или сетевое имя сервера с портом отладчика, например tcp://MyServerName:1561 (порт можно уточнить в меню Конфигуратора Отладка → Подключение → Настройка).ib. Имена сервера и информационной базы (Srvr, Ref) строго чувствительны к регистру символов и должны точно совпадать с параметрами кластера 1С.default.vrd обязательно перезапускаем пул приложений или службу веб-сервера IIS / Apache.Протокол отладки по HTTP обеспечивает значительно более стабильную работу с серверными вызовами, фоновыми заданиями и веб-сервисами по сравнению с TCP/IP. Выполним настройку по шагам:
ragent (в ветке реестра ImagePath) добавим ключи запуска -debug -http.HTTP и перезапустим Конфигуратор. Проверим адрес сервера отладки (по умолчанию выделяется порт из диапазона 1560–1591).http и соответствующий URL:
<debug enable="true"
protocol="http"
url="http://localhost:1560"/>
Выясним причину, по которой точка останова в начале метода HTTP-сервиса часто не срабатывает. При поступлении запроса веб-сервер создает рабочий поток. Отладчику требуется некоторое время (от нескольких сотен миллисекунд до пары секунд) на инициализацию контекста, отправку рукопожатия (handshake) и передачу информации о точках останова в рабочий процесс rphost.
Если код в начале функции отрабатывает мгновенно, поток успевает выполниться до того, как отладчик активирует точку останова. Для решения этой проблемы применим несколько подходов:
Функция ОбработатьЗапросGET(Запрос)
// Временная задержка для подключения отладчика
ТекущееВремя = ТекущаяУниверсальнаяДатаВМиллисекундах();
Пока ТекущаяУниверсальнаяДатаВМиллисекундах() - ТекущееВремя < 2000 Цикл
// Ожидание 2 секунды
КонецЦикла;
// Основная логика сервиса
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки("OK");
Возврат Ответ;
КонецФункции
Для корректной передачи отладочной информации необходимо правильно сконфигурировать веб-сервер:
1. При значении больше единицы запросы распределяются между разными процессами, к которым Конфигуратор может не успеть подключиться.Чтобы не зависеть от сетевых задержек веб-сервера при отладке сложной бизнес-логики, рекомендуется использовать архитектурное разделение кода:
HTTPСервисЗапрос и упаковку результата в HTTPСервисОтвет. Вся обработка данных выносится в серверный общий модуль.