При активной интеграции и тестировании внешних подключений (например, через утилиту SOAPUI или Postman) разработчики часто сталкиваются с ситуацией, когда после каждого обращения к веб-сервису в списке активных пользователей 1С остается «висеть» отдельный сеанс. Со временем количество таких подключений накапливается, что приводит к излишней нагрузке на кластер серверов и исчерпанию доступных клиентских лицензий.
Проанализируем причину такого поведения платформы «1С:Предприятие» и рассмотрим по шагам все способы корректного завершения или переиспользования сеансов интернет-сервисов.
По умолчанию платформа 1С оптимизирует работу веб-сервисов (SOAP) и HTTP-сервисов, используя механизм пула сеансов. Инициализация нового сеанса (авторизация, запуск сеансовых событий, выполнение кода в модуле УстановкаПараметровСеанса) — ресурсоемкая операция. Чтобы не создавать сеанс заново при каждом отдельном HTTP/SOAP-запросе, сервер 1С удерживает созданную сессию в памяти для повторного использования последующими запросами.
Однако если пул сеансов настроен некорректно или внешнее приложение каждый раз инициирует абсолютно новую сессию без передачи идентификатора, неактивные сеансы продолжают занимать ресурсы.
Выясним, какие варианты настройки существуют для решения этой проблемы.
Если специфика интеграции требует, чтобы сеанс уничтожался сразу после возврата ответа вызывающей стороне, отключим механизм повторного использования:
default.vrd. Для этого в описании сервиса добавим атрибут reuseSessions="dontuse".Посмотрим на пример фрагмента файла публикации default.vrd с отключением повторного использования сессий:
<service name="MyExchangeService"
alias="MyExchangeService.1cws"
reuseSessions="dontuse"/>
Важный нюанс: при таком подходе сеанс завершается мгновенно, но каждый последующий вызов сервиса будет занимать больше времени из-за полной повторной инициализации окружения 1С.
В большинстве продуктивных систем оптимальным решением является не полное отключение сеансов, а ограничение времени их жизни в состоянии простоя. Настроим автоматический пул сеансов с жестким таймаутом:
20 или 60.default.vrd укажем параметры автоматического пула сеансов:
<service name="MyExchangeService"
alias="MyExchangeService.1cws"
reuseSessions="autouse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
Разберем параметры этой настройки подробнее:
reuseSessions="autouse" — платформа автоматически распределяет входящие запросы по свободным сеансам из пула.sessionMaxAge="20" — время жизни неактивного сеанса в секундах. Если в течение 20 секунд новых запросов не поступило, сеанс будет корректно закрыт платформой.poolSize="10" — максимальное число одновременно удерживаемых сессий для данного сервиса.poolTimeout="5" — время ожидания освобождения сеанса при превышении размера пула.Если в свойствах сервиса установлено «Повторное использование сеансов» = «Использовать» (в default.vrd задан параметр reuseSessions="use"), клиентское приложение может самостоятельно управлять открытием и закрытием сессии:
IBSession: start. Платформа 1С инициализирует сессию и возвращает в заголовке ответа Cookie с идентификатором сеанса (IBSession=<GUID>).IBSession: finish. Обработав запрос, платформа сразу завершает сеанс пользователя и освобождает лицензию.Если к веб-сервису обращаются сторонние системы, поведение которых сложно изменить, настроим принудительное завершение неактивных сеансов средствами кластера серверов 1С:
ras / rac или оснастку MMC).60 секунд).60 секунд).После применения параметров фоновые процессы кластера будут принудительно закрывать оставшиеся неактивные подключения, предотвращая разрастание списка сеансов.