Рассмотрим ситуацию интеграции 1С с внешними сторонними системами по протоколу SOAP (веб-сервисы). В корпоративных инфраструктурах часто возникает задача, когда платформа 1С:Предприятие выступает в роли SOAP-сервера и принимает синхронные и асинхронные запросы от сторонних сервисов (например, написанных на Python, PHP, Java или C#). При этом критически важно сохранить высокую производительность и стабильность базы данных, особенно если система обслуживает непрерывный поток данных.
Проанализируем технические особенности работы веб-сервисов 1С, оценим предельные нагрузки и разберем архитектурные решения, которые позволят системе выдерживать интенсивный поток запросов.
Платформа 1С:Предприятие поддерживает механизмы веб-сервисов и работы с XDTO нативно. Однако при выполнении десятков запросов в секунду с передачей больших массивов данных (таблиц с тысячами строк) проявляются следующие узкие места:
УстановкаПараметровСеанса. Если запрос длится несколько миллисекунд, а сам сеанс создается дольше, сервер перегружается накладными расходами.rphost.Если планируется нагрузка порядка 10–30 запросов в секунду с получением массивов данных в тысячи строк, удерживать постоянное синхронное подключение не рекомендуется. Наиболее надежный подход — разделение обработки на два коротких запроса с использованием механизмов платформы ФоновыеЗадания.
Разберем по шагам алгоритм этой схемы:
ФоновыеЗадания.Выполнить(). Метод SOAP-сервиса моментально возвращает клиенту ответ со статусом и полученным GUID задачи.Рассмотрим пример реализации фонового выполнения подготовки данных в коде 1С:
Функция СоздатьЗадачуНаВыгрузку(ПараметрыЗапросаXML) Экспорт
ИдентификаторЗадачи = Новый УникальныйИдентификатор;
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Строка(ИдентификаторЗадачи));
МассивПараметров.Добавить(ПараметрыЗапросаXML);
// Запуск фонового задания для тяжелой выборки
ФоновыеЗадания.Выполнить("ИнтеграцияСервис.ПодготовитьДанныеВыгрузки",
МассивПараметров,
КлючЗадания,
"Подготовка данных для SOAP " + Строка(ИдентификаторЗадачи));
Возвращать Строка(ИдентификаторЗадачи);
КонецФункции
Для предотвращения постоянного повторного создания сеансов и сокращения времени отклика при частых вызовах SOAP необходимо настроить параметр повторного использования сеансов. Это делается в файле публикации веб-сервиса default.vrd.
Выясним параметры настройки пула сеансов в секции публикации:
<point name="WebExchange"
alias="WebExchange.1cws"
enable="true"
ib="File="C:\Bases\Trade";">
<reuse sessions="autouse"
poolSize="10"
poolTimeout="5"
maxAge="60"/>
</point>
Проанализируем значения ключевых атрибутов:
sessions="autouse" — переводит режим использования сеансов в повторный доступ.poolSize — определяет максимальное число сеансов в пуле, удерживаемых для выполнения вызовов сервиса.poolTimeout — время ожидания освобождения сеанса из пула при высокой интенсивности вызовов.maxAge — максимальное время жизни сеанса в секундах, после которого он корректно перезапускается.Если планируемый поток данных превышает 50–100 запросов в секунду или 1С является критической учетной системой (например, обслуживание таможенного терминала или склада), целесообразно рассмотреть дополнительные варианты архитектуры: