Почему HTTP-сервисы в 1С создают новые сеансы вместо их переиспользования?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При настройке интеграции через HTTP-сервисы многие разработчики сталкиваются с ситуацией, когда вместо ожидаемого использования пула сеансов, платформа каждый раз создает новый сеанс. В результате настройки таймаутов, заданные в свойствах HTTP-сервиса, игнорируются, а сеансы живут по правилам обычных пользователей, «зависая» в памяти сервера до завершения стандартного времени жизни сеанса ИБ. Давайте вместе разберем, почему это происходит и как настроить систему корректно.

Анализ причин некорректной работы пула

Первое, на что необходимо обратить внимание — это приоритет настроек. Если поведение сервиса отличается от того, что задано в конфигураторе, вероятно, настройки публикации веб-сервера перекрывают ваши параметры. Рассмотрим подробнее основные узлы, где может быть скрыта проблема.

  1. Конфликт настроек в файле публикации (default.vrd). Файл default.vrd является первичным источником истины для веб-сервера. Если в нем неверно указаны атрибуты пула, настройки из конфигуратора будут проигнорированы.
  2. Отсутствие заголовка IBSession. Если вы используете ручное управление сеансами (параметр reuseSessions установлен в значение use), платформа ожидает от клиента передачи заголовка IBSession. Без него 1С каждый раз создает новый сеанс.
  3. Зависание сеансов на уровне кластера. Если сеанс по какой-либо причине (например, из-за ошибки в УстановкаПараметровСеанса) помечается как занятый, механизм переиспользования перестает на него распространяться, и он становится обычным «спящим» сеансом.
  4. Настройки веб-сервера. Параметры Timeout и KeepAliveTimeout на уровне Apache или IIS могут принудительно разрывать соединение раньше, чем 1С успеет вернуть сеанс в пул.

Шаг 1: Проверка файла публикации default.vrd

Первым делом откройте файл default.vrd, расположенный в каталоге публикации вашего веб-сервиса. Сравните его с базой, где функционал работает корректно. Обратите внимание на следующие параметры:


<point alias=\"ваш_сервис\"启用=\"true\">
    <httpServices>
        <service name=\"ИмяВашегоСервиса\" reuseSessions=\"autouse\" sessionMaxAge=\"20\" poolSize=\"10\" poolTimeout=\"5\"/>
    </httpServices>
</point>

Если значение reuseSessions стоит в dontuse, переиспользование отключено. Убедитесь, что параметры sessionMaxAge (время жизни сеанса) и poolSize соответствуют вашим требованиям. Именно здесь задаются ограничения, которые должны перекрывать стандартные настройки информационной базы.

Шаг 2: Стратегии управления сеансами

Разберем разницу между доступными стратегиями переиспользования:

Шаг 3: Диагностика критических ошибок

Если настройки публикации верны, но сеансы все равно «плодятся», проанализируйте модуль УстановкаПараметровСеанса. Платформа 1С вызывает этот модуль при создании каждого сеанса. Если внутри него происходит необработанная ошибка, исключение или длительное выполнение, процесс инициализации сеанса может завершиться некорректно. В таких случаях платформа отбрасывает сеанс как «невалидный» для пула, и он продолжает существовать как обычное соединение с БД.

Также рекомендуется проверить логи технологического журнала на предмет ошибок записи в пул или проблем с сетью. Если веб-сервер принудительно разрывает соединение, сеанс не успевает «вернуться» в пул и остается «висеть» до того момента, пока сервер 1С не определит его как неактивного пользователя согласно глобальным настройкам кластера.

Итог: алгоритм действий

  1. Проверьте файл default.vrd на наличие правильных параметров reuseSessions и sessionMaxAge.
  2. Если используете use, убедитесь, что ваш клиент корректно работает с Cookies и заголовками IBSession.
  3. Исключите ошибки в УстановкаПараметровСеанса, которые могут препятствовать нормальной работе пула.
  4. Проверьте, не разрывает ли веб-сервер соединения преждевременно из-за своих внутренних настроек таймаутов.

Работая последовательно с каждым из этих пунктов, вы сможете добиться корректного переиспользования сеансов и снизить нагрузку на сервер 1С.

← На главную