Почему не работает отладка по TCP в 1С после обновления платформы (с версии 8.3.15 и выше)

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

Обновление платформы «1С:Предприятие» — стандартная процедура для любого разработчика и администратора систем 1С. Однако очень часто после перехода на новые релизы (особенно начиная с версии 8.3.15 и выше) разработчики сталкиваются с неприятной ситуацией: полностью перестает работать отладка по протоколу TCP. При этом настройки службы сервера 1С не менялись, ключ запуска -debug прописан, а Конфигуратор наотрез отказывается видеть предметы отладки или останавливаться на точках останова.

В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем внутренние механизмы сетевого взаимодействия отладчика 1С, научимся диагностировать сетевые подключения с помощью утилит операционной системы и рассмотрим несколько практических способов решения проблемы.

Особую сложность ситуации добавляет использование гетерогенных сред, когда сервер приложений функционирует на относительно современной ОС (например, Windows Server 2008 R2 или 2012 R2), а сеансы пользователей и разработчиков запускаются на терминальных серверах под управлением устаревших систем, таких как Windows Server 2003 R2. Давайте вместе разберемся в деталях этой технической проблемы.

---

Как устроена отладка по TCP в 1С:Предприятие: физика процесса

Для того чтобы понять, где именно происходит сбой, нам необходимо детально изучить архитектуру взаимодействия Конфигуратора, сервера приложений 1С и клиентского сеанса при использовании классического протокола отладки TCP/IP. Многие ошибочно полагают, что для работы отладки достаточно того, чтобы клиентский компьютер имел доступ к портам сервера 1С. Это корневое заблуждение.

Отладка по TCP в 1С является двунаправленной (симметричной). Это значит, что сетевое соединение должно устанавливаться в обе стороны:

  1. Инициация со стороны клиента: При запуске Конфигуратора или поиске предметов отладки клиентский компьютер обращается к портам кластера серверов 1С (по умолчанию это порты 1540 и 1541). Это исходящее соединение для клиента и входящее для сервера. Оно практически всегда работает успешно, так как брандмауэры по умолчанию разрешают любой исходящий трафик.
  2. Обратное подключение со стороны сервера: Как только на сервере начинает выполняться код (например, в фоновом задании или при вызове серверного метода из формы), рабочий процесс сервера rphost.exe должен сам инициировать сетевое подключение к Конфигуратору. Конфигуратор на клиентской машине в этот момент открывает локальный порт из диапазона отладки (по умолчанию это диапазон 1560–1591) и ожидает входящего подключения от сервера.

Если сервер 1С по какой-то причине не может установить обратное соединение с Конфигуратором на порты 1560–1591, отладка работать не будет. Конфигуратор может видеть серверные предметы отладки (так как первичный запрос на сервер прошел), но точки останова срабатывать не будут, а клиентские предметы отладки (тонкий или толстый клиент) вообще не появятся в списке доступных.

---

Причина №1. Ловушка «нового пути» в правилах брандмауэра и антивируса

Рассмотрим самую частую причину сбоя при переходе на новые релизы платформы. Системные администраторы часто уверяют, что «все порты открыты, брандмауэр Windows отключен, ничего не блокируется». Однако на практике в корпоративной среде помимо стандартного брандмауэра Windows всегда присутствует стороннее программное обеспечение безопасности: Kaspersky Endpoint Security, Symantec, Dr.Web или аппаратные межсетевые экраны.

Многие современные системы защиты настраиваются не по номерам портов, а по конкретному пути к исполняемому файлу программы. В этом и кроется главная проблема обновлений 1С:

Для системы безопасности терминального сервера новый исполняемый файл из новой директории является абсолютно неизвестным процессом. Даже если для старой версии платформы было создано исключение, новая платформа автоматически блокируется системой защиты при попытке открыть входящий порт 1560 для приема подключений от сервера 1С.

---

Причина №2. Устаревшая ОС терминального сервера (Windows Server 2003 R2)

Если ваш терминальный сервер работает под управлением устаревшей операционной системы, такой как Windows Server 2003 R2, это создает дополнительные критические проблемы при переходе на платформу 8.3.15 и выше. Начиная с версии 8.3.15, разработчики 1С существенно обновили сетевую подсистему платформы, оптимизировав работу с сокетами и добавив полноценную поддержку IPv6 (включая dual-stack сокеты).

Сетевой стек Windows Server 2003 физически не поддерживает многие современные системные вызовы Windows API, которые использует новая платформа 1С для прослушивания сетевых портов отладки. Из-за этого Конфигуратор на Windows Server 2003 может некорректно инициализировать прослушивание портов TCP, либо операционная система может сбрасывать входящие пакеты от рабочего процесса сервера 1С.

---

Диагностика сетевого состояния портов с помощью утилиты netstat

Для того чтобы доказать сетевую природу проблемы, не нужно верить на слово заявлениям администраторов. Мы можем самостоятельно провести диагностику с помощью встроенной консольной утилиты netstat.

Давайте проанализируем ситуацию. Запустим командную строку на терминальном сервере, где запущен наш Конфигуратор новой версии платформы, и выполним команду для проверки состояния портов отладки:

netstat -ano | findstr "1560"

Мы можем увидеть два принципиально разных состояния:

  1. Если мы видим строку со статусом LISTENING, это означает, что Конфигуратор успешно запустился и открыл порт 1560 для ожидания подключений от сервера 1С. Порт готов к работе.
  2. Если мы видим, что со стороны сервера 1С (например, с IP-адреса сервера СУБД или сервера приложений) устанавливается соединение, но оно висит в состоянии SYN_SENT или вовсе отсутствует, это прямое доказательство того, что сетевой экран блокирует входящие пакеты от сервера 1С на терминальный сервер.

Также обратите внимание на следующий важный симптом: если утилита показывает состояние ESTABLISHED для портов 1540 и 1541 между терминалом и сервером 1С, но при этом порты из диапазона 1560-1591 остаются исключительно в режиме LISTENING (без активных установленных соединений со стороны сервера), это однозначно указывает на блокировку входящего трафика на стороне клиента (терминального сервера).

---

Варианты решения проблемы

Рассмотрим два основных практических пути решения данной проблемы: классический (настройка правил TCP) и современный (переход на HTTP-отладку).

Способ 1. Корректная настройка правил сетевого экрана для TCP-отладки

Если вам критически важно сохранить привычную отладку по TCP, необходимо правильно настроить правила фильтрации трафика на терминальном сервере. Поскольку прописывать правила для каждого релиза платформы (из-за постоянно меняющихся путей к 1cv8.exe) неэффективно, лучшим решением будет создание правила по диапазону портов, без привязки к конкретному исполняемому файлу.

Выполните следующие шаги (самостоятельно при наличии прав или силами системных администраторов):

  1. Откройте монитор вашей системы защиты (например, Kaspersky Endpoint Security или встроенный брандмауэр Windows в режиме повышенной безопасности).
  2. Создайте новое Правило для входящих подключений (Inbound Rule).
  3. Выберите тип правила: Для порта (Port).
  4. Укажите протокол: TCP.
  5. В поле «Определенные локальные порты» укажите диапазон отладки 1С: 1560-1591 (если у вас запущено несколько Конфигураторов одновременно, диапазон можно расширить, например, до 1560-1691).
  6. Выберите действие: Разрешить подключение.
  7. Укажите профили сети, для которых применяется правило (обычно это «Доменный» и «Частный»).

После применения этого правила сервер 1С сможет беспрепятственно подключаться к запущенному Конфигуратору на терминальном сервере, независимо от того, какая именно версия платформы 1С сейчас установлена и по какому пути расположен файл 1cv8.exe.

---

Способ 2. Переход на отладку по протоколу HTTP (Рекомендуемый способ)

Начиная с версии 8.3.7, в платформе 1С:Предприятие появился альтернативный и гораздо более надежный механизм — отладка по протоколу HTTP. В новых версиях платформы (8.3.15+) сама фирма 1С позиционирует его как основной и рекомендуемый способ работы.

Главное преимущество HTTP-отладки заключается в том, что она является однонаправленной. При ее использовании больше не требуется открывать входящие порты на стороне разработчика (на терминальном сервере). И Конфигуратор, и клиентские сеансы сами обращаются к специальной службе отладки (модулю dbgs.exe), запущенному на сервере 1С. Это полностью решает проблемы с брандмауэрами на терминальных серверах и позволяет без проблем вести отладку даже через интернет или VPN.

Давайте по шагам разберем, как правильно перевести вашу систему на HTTP-отладку.

Шаг 1. Настройка службы сервера 1С:Предприятие

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

Найдите параметр ImagePath и добавьте к строке запуска службы ключ -http. Строка запуска должна выглядеть примерно так:


"C:\Program Files\1cv8\8.3.15.1489\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug -http

После изменения параметров реестра перезапустите службу сервера «1С:Предприятие».

Шаг 2. Настройка Конфигуратора

Теперь укажем Конфигуратору, что отладка должна выполняться по протоколу HTTP:

  1. Запустите Конфигуратор 1С.
  2. Перейдите в меню Сервис — Параметры.
  3. Откройте вкладку Отладка.
  4. Переключите переключатель «Протокол отладки» в положение HTTP (отладчик управляет сеансами).
  5. В поле «Адрес отладчика» укажите URL сервера отладки (по умолчанию сервер отладки запускается на порту 1550 сервера 1С), например: http://sql08:1550 (где sql08 — имя вашего сервера приложений 1С).
  6. Нажмите кнопку «Применить» и закройте настройки.

Шаг 3. Правильный запуск клиентских приложений

Частая ошибка, о которой упоминал автор темы на форуме: «HTTP-отладку включили, но клиентских предметов отладки нет». Это происходит потому, что клиентские приложения (тонкий или толстый клиент) по умолчанию пытаются использовать старый TCP-транспорт.

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

/debug -http -debuggerURL http://sql08:1550

Где параметр -debuggerURL должен точно указывать на адрес службы отладки, настроенный на сервере 1С.

Также включить HTTP-отладку можно непосредственно из пользовательского режима «1С:Предприятие», перейдя в параметры программы и установив соответствующий флаг в разделе настройки отладки.

---

Резюме

Неработающая отладка после обновления платформы до 8.3.15 — это классическая проблема несовместимости новых исполняемых файлов со старыми правилами корпоративной безопасности и устаревшими ОС. Для долгосрочной стабильной работы мы рекомендуем полностью отказаться от устаревшей TCP-отладки и перевести систему разработки на современный протокол HTTP, который лишен проблем с блокировкой входящих портов на рабочих станциях разработчиков.

← На главную