Работа в терминальном режиме (RDS/RDP) накладывает определенные ограничения на использование сетевых ресурсов. Одной из специфических и труднодиагностируемых проблем является внезапное падение платформы 1С:Предприятие у новых пользователей при попытке входа в базу. В этой статье мы подробно разберем, почему возникает ошибка "Обычно разрешается одно использование адреса сокета (протокол/сетевой адрес/порт)", как диагностировать занятость портов и какими способами можно навсегда устранить эту проблему.
Рассмотрим ситуацию: сервер 1С и сервер терминалов разнесены. Пользователи работают в тонком клиенте на RDP-сервере. В какой-то момент база перестает пускать новых людей, при этом старые сессии продолжают работать нормально. Попытка запуска отладки из конфигуратора выдает сообщение: "Для выполнения отладки необходимо включить поддержку сетевого протокола TCP/IP".
Проанализируем техническую сторону вопроса. Когда тонкий клиент 1С запускается, он устанавливает соединение с сервером 1С. Но помимо исходящего соединения, клиент может начать "слушать" определенные порты на локальной машине (в нашем случае — на RDP-сервере). Проверим это с помощью стандартной системной утилиты. Выполним в командной строке сервера терминалов:
netstat -ano | findstr 1560
Если мы увидим список процессов в состоянии LISTENING на портах из диапазона 1560–1591, значит, мы столкнулись именно с проблемой "зависшей" или избыточной отладки. Выясним, почему это происходит именно в этом диапазоне.
По умолчанию платформа 1С использует TCP-протокол для отладки. При включении режима "Разрешить отладку", каждый экземпляр приложения (будь то тонкий или толстый клиент) пытается занять первый свободный порт в жестко заданном диапазоне 1560–1591. Всего доступно 32 порта.
Разберем, в чем кроется ловушка для RDP-сервера:
1560, второй — 1561, тридцать второй — 1591.Важный нюанс: даже если вы расширите динамический диапазон портов в реестре Windows (параметр MaxUserPort), это не поможет, так как 1С ищет порты именно в своем фиксированном интервале.
Почему вдруг у всех пользователей оказалась включена отладка, если они не программисты? Рассмотрим наиболее частый сценарий, связанный с механизмом копирования настроек в 1С. В типовых конфигурациях (например, ERP или УТ 11) администраторы часто используют обработку "Копирование настроек пользователей".
Если у "эталонного" пользователя, с которого копировались настройки интерфейса или прав, в параметрах был установлен флаг "Устанавливать режим разрешения отладки", этот флаг копируется в базу данных для всех остальных. Эти данные хранятся в системной таблице настроек (SystemSettings).
Если нам нужно оперативно "потушить пожар" и запустить пользователей, не тратя время на чистку настроек каждого профиля, воспользуемся ключами запуска. Мы можем добавить в параметры запуска ярлыка или в настройки в окне запуска 1С специальный ключ:
/NoDebug
Этот ключ принудительно запрещает клиенту открывать порты для прослушивания, игнорируя любые внутренние настройки пользователя. Рассмотрим, как это сделать массово для всех пользователей терминала через файл 1CEStart.cfg. В этот файл можно добавить строку:
AdditionalParameters=/NoDebug
Чтобы решить проблему фундаментально, необходимо вычистить настройки, которые заставляют клиент запускаться в режиме отладки. Проанализируем действия пользователя:
Если пользователей много, воспользуемся программным способом очистки. Нам нужно удалить настройки с ключом "Общее/ПараметрыОтладки" (или аналогичные в зависимости от версии платформы) из хранилища системных настроек. Рассмотрим примерный фрагмент кода для обработки:
ВыборкаПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого Пользователь Из ВыборкаПользователей Цикл
// Очистка настроек отладки для каждого пользователя
ХранилищеСистемныхНастроек.Удалить("Общее/ПараметрыЗапуска", "", Пользователь.Имя);
КонецЦикла;
Платформа 1С:Предприятие начиная с версии 8.3.7 поддерживает протокол HTTP для отладки. Это кардинальный способ решения проблемы нехватки портов на RDP. Проанализируем его преимущества:
dbgs), который может располагаться на стороне сервера приложений.Для активации этого режима необходимо в настройках службы сервера 1С добавить ключ -http и настроить использование сервера отладки в параметрах конфигуратора.
Хотя основная причина кроется в 1С, для высоконагруженных RDP-серверов полезно провести тюнинг стека TCP/IP. Если пользователей сотни, они могут исчерпать общие динамические порты. Выполним следующие настройки в реестре:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters. Параметр MaxUserPort установим в значение 65534 (десятичное).TcpTimedWaitDelay, установив его в значение 30 (секунд). По умолчанию Windows держит закрытый порт "занятым" до 4 минут, что критично при массовых подключениях 1С.Мы выяснили, что ошибка сокета в 1С на терминальном сервере чаще всего вызвана исчерпанием 32-х портов отладки (1560–1591). Чтобы избежать этой ситуации в будущем, рекомендуем придерживаться следующих правил:
/NoDebug.Применяя эти методы в комплексе, вы обеспечите стабильную работу пользователей и исключите внезапные падения платформы из-за сетевых конфликтов.