При настройке интеграции через HTTP-сервисы многие разработчики сталкиваются с ситуацией, когда вместо ожидаемого использования пула сеансов, платформа каждый раз создает новый сеанс. В результате настройки таймаутов, заданные в свойствах HTTP-сервиса, игнорируются, а сеансы живут по правилам обычных пользователей, «зависая» в памяти сервера до завершения стандартного времени жизни сеанса ИБ. Давайте вместе разберем, почему это происходит и как настроить систему корректно.
Первое, на что необходимо обратить внимание — это приоритет настроек. Если поведение сервиса отличается от того, что задано в конфигураторе, вероятно, настройки публикации веб-сервера перекрывают ваши параметры. Рассмотрим подробнее основные узлы, где может быть скрыта проблема.
default.vrd является первичным источником истины для веб-сервера. Если в нем неверно указаны атрибуты пула, настройки из конфигуратора будут проигнорированы.reuseSessions установлен в значение use), платформа ожидает от клиента передачи заголовка IBSession. Без него 1С каждый раз создает новый сеанс.УстановкаПараметровСеанса) помечается как занятый, механизм переиспользования перестает на него распространяться, и он становится обычным «спящим» сеансом.Timeout и KeepAliveTimeout на уровне Apache или IIS могут принудительно разрывать соединение раньше, чем 1С успеет вернуть сеанс в пул.Первым делом откройте файл default.vrd, расположенный в каталоге публикации вашего веб-сервиса. Сравните его с базой, где функционал работает корректно. Обратите внимание на следующие параметры:
<point alias=\"ваш_сервис\"启用=\"true\">
<httpServices>
<service name=\"ИмяВашегоСервиса\" reuseSessions=\"autouse\" sessionMaxAge=\"20\" poolSize=\"10\" poolTimeout=\"5\"/>
</httpServices>
</point>
Если значение reuseSessions стоит в dontuse, переиспользование отключено. Убедитесь, что параметры sessionMaxAge (время жизни сеанса) и poolSize соответствуют вашим требованиям. Именно здесь задаются ограничения, которые должны перекрывать стандартные настройки информационной базы.
Разберем разницу между доступными стратегиями переиспользования:
IBSession: start. В ответе 1С пришлет Set-Cookie: ibsession=.... Для корректной работы этого режима клиент обязан возвращать полученную Cookie во всех последующих запросах. Если клиентское приложение игнорирует передачу Cookies, сеансы никогда не будут переиспользоваться.Если настройки публикации верны, но сеансы все равно «плодятся», проанализируйте модуль УстановкаПараметровСеанса. Платформа 1С вызывает этот модуль при создании каждого сеанса. Если внутри него происходит необработанная ошибка, исключение или длительное выполнение, процесс инициализации сеанса может завершиться некорректно. В таких случаях платформа отбрасывает сеанс как «невалидный» для пула, и он продолжает существовать как обычное соединение с БД.
Также рекомендуется проверить логи технологического журнала на предмет ошибок записи в пул или проблем с сетью. Если веб-сервер принудительно разрывает соединение, сеанс не успевает «вернуться» в пул и остается «висеть» до того момента, пока сервер 1С не определит его как неактивного пользователя согласно глобальным настройкам кластера.
default.vrd на наличие правильных параметров reuseSessions и sessionMaxAge.use, убедитесь, что ваш клиент корректно работает с Cookies и заголовками IBSession.УстановкаПараметровСеанса, которые могут препятствовать нормальной работе пула.Работая последовательно с каждым из этих пунктов, вы сможете добиться корректного переиспользования сеансов и снизить нагрузку на сервер 1С.