Перейти к основному содержимому

Сеансы интернет-сервисов 1С

Разработчику Архитектору

Зачем переиспользовать сеанс

Каждый вызов HTTP-сервиса, Web-сервиса или OData без переиспользования создаёт новый сеанс информационной базы. При этом выполняется тяжёлый УстановкаПараметровСеанса() и связанная инициализация. На высокой частоте запросов это даёт задержки и нагрузку на кластер.

Переиспользование сеансов позволяет обслужить следующий запрос уже «прогретым» сеансом.


Два режима

Автоматический пул

Настраивается при публикации (параметры вроде poolSize, poolTimeout, sessionMaxAge / ВремяЖизниСеанса).

  • Сеансы хранятся в разрезе типа сервиса, имени, пользователя, разделителей, безопасного режима.
  • При запросе платформа ищет свободный сеанс с теми же параметрами.
  • Если пул заполнен — ожидание до poolTimeout, затем 406 Not Acceptable.
  • Свободный сеанс уничтожается по истечении ВремяЖизниСеанса.

Подходит для публичных сервисов с однотипными вызовами и унифицированными правами.

Не подходит, если клиенту нужно гарантированно попасть в тот же сеанс (состояние на сервере) — в пуле может быть несколько сеансов с одинаковым ключом.

Ручное управление — заголовок IBSession

Клиент сам создаёт и завершает сеанс через HTTP-заголовок IBSession:

ЗначениеДействие
startСоздать сеанс; в ответе Set-Cookie: IBsession=<ID>
(cookie в следующих запросах)Использовать существующий сеанс
finishЗавершить сеанс из cookie

Без заголовка и cookie сеанс создаётся и уничтожается на каждый вызов.

Подходит для корпоративных интеграций внутри одной организации, когда нужен контроль жизненного цикла.


Практические рекомендации

  • Подбирайте poolSize с запасом — при пике иначе часть запросов получит 406.
  • Учитывайте разные публикации одной базы — у каждой свой пул.
  • Долгие операции в переиспользуемом сеансе блокируют этот сеанс для других запросов с тем же ключом.
  • Для stateless API (каждый запрос автономен) пул сеансов даёт выигрыш без логики IBSession на клиенте.

Связанные материалы


Проверка себя

  • Что выполняется при каждом «холодном» вызове интернет-сервиса?
  • Когда клиент получит HTTP 406?
  • В чём разница автоматического пула и IBSession?

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").