Обновление платформы «1С:Предприятие» — стандартная процедура для любого разработчика и администратора систем 1С. Однако очень часто после перехода на новые релизы (особенно начиная с версии 8.3.15 и выше) разработчики сталкиваются с неприятной ситуацией: полностью перестает работать отладка по протоколу TCP. При этом настройки службы сервера 1С не менялись, ключ запуска -debug прописан, а Конфигуратор наотрез отказывается видеть предметы отладки или останавливаться на точках останова.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем внутренние механизмы сетевого взаимодействия отладчика 1С, научимся диагностировать сетевые подключения с помощью утилит операционной системы и рассмотрим несколько практических способов решения проблемы.
Особую сложность ситуации добавляет использование гетерогенных сред, когда сервер приложений функционирует на относительно современной ОС (например, Windows Server 2008 R2 или 2012 R2), а сеансы пользователей и разработчиков запускаются на терминальных серверах под управлением устаревших систем, таких как Windows Server 2003 R2. Давайте вместе разберемся в деталях этой технической проблемы.
---
Для того чтобы понять, где именно происходит сбой, нам необходимо детально изучить архитектуру взаимодействия Конфигуратора, сервера приложений 1С и клиентского сеанса при использовании классического протокола отладки TCP/IP. Многие ошибочно полагают, что для работы отладки достаточно того, чтобы клиентский компьютер имел доступ к портам сервера 1С. Это корневое заблуждение.
Отладка по TCP в 1С является двунаправленной (симметричной). Это значит, что сетевое соединение должно устанавливаться в обе стороны:
1540 и 1541). Это исходящее соединение для клиента и входящее для сервера. Оно практически всегда работает успешно, так как брандмауэры по умолчанию разрешают любой исходящий трафик.rphost.exe должен сам инициировать сетевое подключение к Конфигуратору. Конфигуратор на клиентской машине в этот момент открывает локальный порт из диапазона отладки (по умолчанию это диапазон 1560–1591) и ожидает входящего подключения от сервера.Если сервер 1С по какой-то причине не может установить обратное соединение с Конфигуратором на порты 1560–1591, отладка работать не будет. Конфигуратор может видеть серверные предметы отладки (так как первичный запрос на сервер прошел), но точки останова срабатывать не будут, а клиентские предметы отладки (тонкий или толстый клиент) вообще не появятся в списке доступных.
---
Рассмотрим самую частую причину сбоя при переходе на новые релизы платформы. Системные администраторы часто уверяют, что «все порты открыты, брандмауэр Windows отключен, ничего не блокируется». Однако на практике в корпоративной среде помимо стандартного брандмауэра Windows всегда присутствует стороннее программное обеспечение безопасности: Kaspersky Endpoint Security, Symantec, Dr.Web или аппаратные межсетевые экраны.
Многие современные системы защиты настраиваются не по номерам портов, а по конкретному пути к исполняемому файлу программы. В этом и кроется главная проблема обновлений 1С:
C:\Program Files (x86)\1cv8\8.3.14.1976\bin\1cv8.exeC:\Program Files (x86)\1cv8\8.3.15.1489\bin\1cv8.exeДля системы безопасности терминального сервера новый исполняемый файл из новой директории является абсолютно неизвестным процессом. Даже если для старой версии платформы было создано исключение, новая платформа автоматически блокируется системой защиты при попытке открыть входящий порт 1560 для приема подключений от сервера 1С.
---
Если ваш терминальный сервер работает под управлением устаревшей операционной системы, такой как 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 -ano | findstr "1560"
Мы можем увидеть два принципиально разных состояния:
LISTENING, это означает, что Конфигуратор успешно запустился и открыл порт 1560 для ожидания подключений от сервера 1С. Порт готов к работе.SYN_SENT или вовсе отсутствует, это прямое доказательство того, что сетевой экран блокирует входящие пакеты от сервера 1С на терминальный сервер.Также обратите внимание на следующий важный симптом: если утилита показывает состояние ESTABLISHED для портов 1540 и 1541 между терминалом и сервером 1С, но при этом порты из диапазона 1560-1591 остаются исключительно в режиме LISTENING (без активных установленных соединений со стороны сервера), это однозначно указывает на блокировку входящего трафика на стороне клиента (терминального сервера).
---
Рассмотрим два основных практических пути решения данной проблемы: классический (настройка правил TCP) и современный (переход на HTTP-отладку).
Если вам критически важно сохранить привычную отладку по TCP, необходимо правильно настроить правила фильтрации трафика на терминальном сервере. Поскольку прописывать правила для каждого релиза платформы (из-за постоянно меняющихся путей к 1cv8.exe) неэффективно, лучшим решением будет создание правила по диапазону портов, без привязки к конкретному исполняемому файлу.
Выполните следующие шаги (самостоятельно при наличии прав или силами системных администраторов):
1560-1591 (если у вас запущено несколько Конфигураторов одновременно, диапазон можно расширить, например, до 1560-1691).После применения этого правила сервер 1С сможет беспрепятственно подключаться к запущенному Конфигуратору на терминальном сервере, независимо от того, какая именно версия платформы 1С сейчас установлена и по какому пути расположен файл 1cv8.exe.
---
Начиная с версии 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:
http://sql08:1550 (где sql08 — имя вашего сервера приложений 1С).Шаг 3. Правильный запуск клиентских приложений
Частая ошибка, о которой упоминал автор темы на форуме: «HTTP-отладку включили, но клиентских предметов отладки нет». Это происходит потому, что клиентские приложения (тонкий или толстый клиент) по умолчанию пытаются использовать старый TCP-транспорт.
Чтобы клиентское приложение успешно зарегистрировалось на HTTP-сервере отладки, его необходимо запускать со специальными ключами командной строки. Измените настройки запуска информационной базы в окне запуска 1С (кнопка «Изменить» — параметры запуска) или ярлык запуска, прописав следующие параметры:
/debug -http -debuggerURL http://sql08:1550
Где параметр -debuggerURL должен точно указывать на адрес службы отладки, настроенный на сервере 1С.
Также включить HTTP-отладку можно непосредственно из пользовательского режима «1С:Предприятие», перейдя в параметры программы и установив соответствующий флаг в разделе настройки отладки.
---
Неработающая отладка после обновления платформы до 8.3.15 — это классическая проблема несовместимости новых исполняемых файлов со старыми правилами корпоративной безопасности и устаревшими ОС. Для долгосрочной стабильной работы мы рекомендуем полностью отказаться от устаревшей TCP-отладки и перевести систему разработки на современный протокол HTTP, который лишен проблем с блокировкой входящих портов на рабочих станциях разработчиков.