При построении архитектуры взаимодействия внешнего веб-сервера (работающего под управлением Linux) и информационной базы 1С часто возникает задача передачи оперативных данных о событиях в режиме реального времени. В операционных системах семейства Windows разработчики нередко применяли прямое COM-соединение, однако в среде Linux этот механизм недоступен. Разберем наиболее эффективные способы интеграции, выясним правила расходования лицензий 1С при внешних вызовах и рассмотрим механизм управления пулом сеансов.
Для инициации обращений со стороны внешнего веб-сервера к базе 1С проанализируем основные подходы платформы:
Рассмотрим правила лицензирования обращений через WS- и HTTP-соединения, так как это ключевой фактор при проектировании архитектуры:
WS-соединение или HTTP-сервис. Обычные клиентские лицензии 1С на такие сеансы не расходуются — платформа проверяет только наличие действующей лицензии на сервер 1С:Предприятия.Выясним, как платформа 1С обрабатывает частые обращения без постоянных задержек на инициализацию сеанса. Начиная с версии 8.3.9, платформа автоматически включает механизм переиспользования сеансов (session pooling).
При первом запросе пользователя создается рабочий сеанс, который после отправки ответа не уничтожается мгновенно, а помещается в кэш (пул). При поступлении следующего запроса от того же пользователя платформа мгновенно передает обработку уже готовому сеансу, исключая затраты времени на повторный запуск и авторизацию.
Если запросы выполняются быстро (доли секунды), один и тот же сеанс из пула способен легко обслуживать поток в 10–50 вызовов в минуту.
Параметры работы опубликованных веб- и HTTP-сервисов определяются конфигурационным файлом default.vrd. Разберем ключевые атрибуты элемента point, с помощью которых можно оптимизировать нагрузку:
reuseSessions — режим переиспользования сеансов. Может принимать значения autouse (автоматически), use (принудительно переиспользовать) или dontuse (закрывать сеанс после каждого вызова).sessionMaxAge — максимальное время жизни простаивающего сеанса в пуле в секундах (по истечении времени неактивный сеанс завершается).poolSize — предельное количество одновременно удерживаемых сеансов в пуле для одного пользователя базы.poolTimeout — время ожидания освобождения существующего сеанса в пуле перед созданием нового.waitTimeout — максимальное время ожидания ответа клиентом при полной занятости всех доступных сеансов.Посмотрим на пример фрагмента файла default.vrd с явным указанием параметров пула сеансов:
<service name="IntegrationService"
rootUrl="api"
enable="true"
reuseSessions="use"
sessionMaxAge="60"
poolSize="10"
poolTimeout="5"
waitTimeout="30"/>
Проанализируем важные аспекты надежности при вызове 1С из внешней среды:
200 OK или 202 Accepted. Саму обработку следует переложить на фоновое регламентное задание 1С.ib файла default.vrd. Надежнее настроить авторизацию по заголовку (Basic Authentication) со стороны вызывающего сервера или проверять Bearer-токены непосредственно в коде модуля HTTP-сервиса.Access-Control-Allow-Origin и методы OPTIONS.