При работе пользователей через веб-браузер часто возникает ситуация: сотрудники закрывают вкладку или окно браузера нажатием на системный крестик, но их сеансы продолжают числиться активными на сервере 1С:Предприятия. При повторном входе для пользователя создается новый сеанс, который занимает еще одну клиентскую лицензию. В результате пул свободных лицензий быстро исчерпывается, и программа начинает блокировать вход с ошибкой «нет свободной лицензии» еще до отображения формы авторизации. Разберем по шагам причины такого поведения веб-клиента и выясним все эффективные способы решения этой проблемы.
Проанализируем, почему сеансы веб-клиента не завершаются мгновенно при закрытии браузера. В отличие от тонкого клиента, веб-клиент работает поверх протокола HTTP/HTTPS через веб-сервер (IIS или Apache). Веб-клиент с определенной периодичностью отправляет на сервер служебные пакеты (пинги) для поддержания активности. Когда пользователь закрывает окно браузера или вкладку, веб-клиент не всегда успевает корректно отправить серверу команду завершения работы.
Сервер приложений 1С фиксирует отсутствие контрольных пакетов лишь спустя некоторое время (обычно около 2 минут), после чего запускается таймер перевода сеанса в спящий режим. Важно понимать ключевое правило архитектуры 1С: спящий сеанс освобождает клиентскую лицензию. Лицензия возвращается в общий пул и становится доступной для других пользователей. Если же пользователь вернется в спящий сеанс (например, восстановит вкладку), сеанс «проснется» и запросит лицензию заново.
Однако если механизмы засыпания и завершения не настроены или работают некорректно из-за ошибок платформы, сеансы остаются в статусе активных часами или даже сутками, блокируя лицензии.
Рассмотрим штатный инструмент управления временем жизни пассивных подключений. Эти настройки задаются централизованно для конкретной информационной базы:
300–600 секунд, то есть 5–10 минут).60–120 секунд).Обратим особое внимание на лицензионные ограничения платформы «1С:Предприятие 8.3». Начиная с версии 8.3.14, возможность изменения параметров «Время засыпания пассивного сеанса» и «Время завершения спящего сеанса» относится к функционалу уровня КОРП.
Если информационная база работает на лицензиях уровня ПРОФ и число одновременно работающих пользователей превышает 10, изменение указанных параметров со значений по умолчанию (0) приведет к ошибке проверки лицензионных ограничений и блокировке работы пользователей. Поэтому для баз на лицензиях ПРОФ эти параметры должны оставаться равными 0, а задачу освобождения сеансов необходимо решать альтернативными путями.
Выясним причину, по которой даже при корректных настройках сеансы продолжают висеть сутками. В некоторых релизах платформы (в частности, в ветках 8.3.5, 8.3.7 и ряде ранних версий 8.3.10+) присутствовали зарегистрированные ошибки, из-за которых фоновые процессы веб-клиента не позволяли сеансу перейти в пассивный режим.
Если платформа не обновлялась длительное время, необходимо выполнить обновление технологической платформы до актуального стабильного релиза. После устранения платформенных багов спящие сеансы начинают корректно засыпать и своевременно освобождать лицензии в соответствии с заложенной логикой.
Для систем на лицензиях уровня ПРОФ, где нельзя штатно сократить время засыпания в параметрах информационной базы, наиболее надежным решением является внешняя автоматизация с помощью консольной утилиты rac и службы ras (Remote Administration Server).
Разберем логику работы такого скрипта, запускаемого по расписанию в планировщике задач операционной системы:
ras (по умолчанию порт 1545).rac cluster session list.last-active-at) и признак сеанса веб-клиента.rac cluster session terminate.Посмотрим на пример базовой команды отключения сеанса через утилиту rac:
rac session --cluster=cluster-id terminate --session=session-id
Еще один способ контроля соединений — создание собственного регламентного задания внутри конфигурации или через внешнюю обработку. Задание может выполняться каждые 5–10 минут, опрашивая кластер серверов через COMConnector или программный интерфейс администрирования.
Посмотрим на упрощенную схему программного подключения к кластеру для анализа сеансов:
Соединитель = Новый COMОбъект("V83.COMConnector");
Агент = Соединитель.ConnectAgent("ServerName");
Кластеры = Агент.GetClusters();
Для Каждого Кластер Из Кластеры Цикл
Агент.Authenticate(Кластер, "AdminUser", "AdminPassword");
Сеансы = Агент.GetSessions(Кластер);
Для Каждого ТекСеанс Из Сеансы Цикл
// Проверяем длительность отсутствия активности
// и при необходимости вызываем завершение
// Агент.TerminateSession(Кластер, ТекСеанс);
КонецЦикла;
КонецЦикла;
Проанализируем параметры веб-сервера, влияющие на удержание соединений. При публикации информационной базы создается файл конфигурации default.vrd. В нем можно настроить параметры пула соединений:
poolTimeout определяет время жизни неиспользуемого сеанса в пуле веб-сервера. Уменьшение этого значения позволяет веб-серверу быстрее освобождать ресурсы.Помимо технических настроек, важно минимизировать возникновение зависших процессов со стороны клиентских рабочих мест: