Разработка и поддержка интеграционных решений на базе HTTP-сервисов в платформе «1С:Предприятие 8.3» — стандартная задача для современного программиста. Однако на этапе отладки многие специалисты сталкиваются с крайне неприятной проблемой: внешние запросы отправляются, база данных их обрабатывает, но точка останова в конфигураторе упорно игнорируется. При этом в списке подключенных предметов отладки сеанс HTTP-запроса может на долю секунды появиться и тут же бесследно исчезнуть.
В рамках этой статьи мы подробно проанализируем, почему возникает такое поведение системы, разберем ключевые сетевые нюансы взаимодействия конфигуратора и сервера приложений, а также составим пошаговую инструкцию по переходу на современный и стабильный протокол отладки по HTTP. Дополнительно мы рассмотрим методы устранения популярной сопутствующей ошибки HTTP 404.0 - Not Found.
Для того чтобы понять причину проблемы, давайте рассмотрим внутренний механизм обработки HTTP-запроса платформой «1С:Предприятие». Когда стороннее приложение или веб-браузер отправляет запрос к вашему HTTP-сервису, веб-сервер (например, IIS или Apache) перенаправляет этот запрос модулю расширения веб-сервера 1С. Тот, в свою очередь, обращается к кластеру серверов 1С.
В этот момент сервер 1С мгновенно создает специальный фоновый сеанс для обработки конкретного HTTP-запроса. Если в конфигураторе включено автоматическое подключение фоновых заданий, отладчик регистрирует появление нового сеанса — именно этот момент вы видите в списке предметов отладки. Однако выполнение программного кода HTTP-сервиса обычно занимает доли секунды. Как только код выполнен, сеанс завершается и исчезает из списка. Конфигуратор физически не успевает «захватить» этот кратковременный процесс.
Выделим две основные причины, почему конфигуратор не успевает вовремя подключиться к сеансу при использовании классической схемы отладки по протоколу TCP/IP:
rphost). Он пытается подключиться к запущенному на вашем компьютере конфигуратору по случайному порту из диапазона 1560–1591. Если на вашем рабочем месте включен брандмауэр Windows или локальный антивирус с сетевым экраном, это входящее соединение блокируется. В результате сервер выполняет код без остановки, а конфигуратор так и остается в режиме ожидания.rphost, ваш конфигуратор может быть подключен к одному рабочему процессу, а входящий HTTP-запрос примет и обработает совершенно другой процесс. В такой ситуации перехват точки останова также не произойдет.Если по каким-то причинам вы обязаны использовать старый протокол TCP/IP, выполните следующие шаги для локализации проблемы:
Шаг 1. Настройка сетевого экрана (брандмауэра). Полностью отключите брандмауэр на вашем компьютере для проведения быстрого теста. Если отладка заработает, значит, дело в закрытых портах. В этом случае включите брандмауэр обратно и добавьте в его исключения правила для входящих подключений:
1cv8.exe.1560–1591 для входящего трафика с IP-адреса сервера приложений 1С.Шаг 2. Ограничение количества рабочих процессов. На время проведения отладки в консоли администрирования кластера серверов 1С временно установите параметры работы так, чтобы активным оставался ровно один рабочий процесс rphost. Это гарантирует, что и ваш конфигуратор, и отлаживаемый веб-сеанс будут находиться в одном адресном пространстве.
Начиная с версии платформы 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. Настройка параметров отладки в Конфигураторе.
Запустите конфигуратор вашей информационной базы и выполните следующие действия:
http://ИмяВашегоКомпьютера:1561). Скопируйте это значение в буфер обмена — оно понадобится нам на следующем шаге.Шаг 3. Настройка и обновление публикации на веб-сервере.
Теперь нужно сообщить веб-серверу, куда именно отправлять информацию для отладчика:
http://ИмяВашегоКомпьютера:1561).Шаг 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.
Бывают ситуации, когда веб-сервер возвращает клиенту ошибку 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-сервисов в вашей базе.