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

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

При разработке и интеграции сторонних систем с 1С через веб-сервисы (WS) разработчики часто сталкиваются со специфической ситуацией: запрос от стороннего клиента (например, Altova XMLSpy или Postman) корректно попадает в точку останова в Конфигураторе, а при отправке аналогичного запроса из удаленной рабочим станции или клиентского приложения 1С точка останова «проскакивает». При этом в списке подключенных предметов отладки веб-сервис появляется, но код на сервере не останавливается и изменения в базе данных не фиксируются.

Рассмотрим подробно причинно-следственные связи этой проблемы и разберем варианты её решения.

Основные причины проблемы при отладке WS

Проанализируем ситуации, которые приводят к сбоям отладки веб-сервисов:

  1. Особенности работы протокола TCP в отладчике 1С: При классической отладке по протоколу TCP отладчик требует не только исходящего соединения от Конфигуратора к серверу, но и входящих подключений со стороны сервера 1С к ПК разработчика в диапазоне портов 1560–1591. Если на локальном ПК или в промежуточном сетевом оборудовании включен брандмауэр, предмет отладки успевает зарегистрироваться, но отправка сигнала об остановке на точке останова блокируется.
  2. Зависание сеансов отладки (клин отладчика): При частых повторных вызовах сервиса с удаленных виртуальных машин или фоновых заданий служба отладки по TCP может терять связь с процессом 1cv8.exe, из-за чего отладчик переходит в нерабочее состояние до перезапуска Конфигуратора или веб-сервера.
  3. Некорректный адрес отладчика в файле публикации default.vrd: Если в файле публикации на веб-сервере (Apache или IIS) указан параметр url="tcp://localhost:1560", то удаленные вызовы с других компьютеров не смогут перенаправить поток отладки на рабочее место разработчика.
  4. Многопроцессная архитектура веб-сервера (Web Garden): В IIS при настройке пула приложений с несколькими рабочими процессами (w3wp.exe) повторные WS-запросы от клиента могут попадать в разные процессы, к которым отладчик еще не успел подключиться.

Решение 1: Переход на протокол отладки по HTTP

Самым надежным и рекомендуемым способом решения проблем с отладкой веб-сервисов, фоновых заданий и удаленных сеансов является перевод отладчика 1С на протокол HTTP. HTTP-отладка работает через единый HTTP-порт сервера отладки (dbgs) и не требует открытия входящих портов на компьютере разработчика.

Разберем по шагам настройку отладки по HTTP:

  1. Запуск сервера отладки на сервере 1С:

    В реестре Windows или в файле службы агента сервера 1С (1cv8ws.txt / параметры службы) необходимо добавить ключевые параметры запуска -debug -http.

    Пример строки запуска службы сервера 1С:

    
    "C:\Program Files\1cv8\8.3.XX.XXXX\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\ProgramData\1C\1cv8" -debug -http
    
  2. Настройка файла публикации default.vrd:

    Откроем файл default.vrd в каталоге публикации веб-сервиса и убедимся, что блок отладки настроен на протокол HTTP и указывает на адрес сервера отладки (по умолчанию используется порт 1550):

    <debug enable="true" protocol="http" url="http://myserver:1550" />

    После внесения изменений обязательно перезапустим веб-сервер (IIS или Apache).

  3. Переключение режима отладки в Конфигураторе:

    В Конфигураторе перейдем в меню Сервис — Параметры — Отладка. Выберем протокол HTTP и укажем адрес сервера отладки и порт (например, http://myserver:1550).

Решение 2: Проверка брандмауэра и файла default.vrd при отладке по TCP

Если перевод на HTTP-отладку временно недоступен, проанализируем настройки локальной сети и брандмауэра для протокола TCP:

  1. На ПК разработчика, где запущен Конфигуратор, добавим входящее правило в Брандмауэре Windows для исполняемого файла 1cv8.exe или явно разрешим диапазон TCP-портов 1560–1591.
  2. В файле default.vrd укажем точный IP-адрес или сетевое имя ПК разработчика: <debug enable="true" protocol="tcp" url="tcp://192.168.1.50:1560" />
  3. Перезапустим службу веб-сервера.

Решение 3: Ограничение рабочих процессов веб-сервера и диагностика кода

Выясним дополнительную причину, по которой код может не выполнять ожидаемые действия на сервере. Если веб-сервис возвращает ответ, но изменения в базе не происходят, возможно, выполнение аварийно завершается в блоке перехвата ошибок до попадания на точку останова.

  1. Ограничение процессов в IIS: В диспетчере служб IIS откроем параметры пула приложений, обслуживающего веб-сервис 1С. Установим значение Максимальное количество рабочих процессов (Maximum Worker Processes) равным 1. Это исключит ситуацию распыления запросов по разным процессам.
  2. Логирование вызова: Добавим в начало исполняемой операции веб-сервиса запись в журнал регистрации, чтобы убедиться, что вызов физически доходит до сервера 1С:
    
    ЗаписьЖурналаРегистрации("ОтладкаWS",
        УровеньЖурналаРегистрации.Информация,,,
        "Вызов операции веб-сервиса выполнен успешно.");
    
← На главную