Рассмотрим ситуацию, с которой часто сталкиваются разработчики при тестировании веб-сервисов 1С из сторонних утилит (например, SOAPUI или Postman). После выполнения каждого вызова или проверки WSDL сеанс пользователя остаётся активным в платформе 1С и с течением времени накапливается множество «висящих» сессий.
Выясним причину такого поведения. По умолчанию платформа 1С использует пул сеансов для веб-сервисов и HTTP-сервисов. Это необходимо для ускорения повторных обращений, чтобы каждый раз не тратить время на авторизацию и создание нового соединения. Однако при тестовых вызовах без сохранения cookie сессии или при некорректных настройках пула каждый запрос приводит к созданию нового неактивного сеанса, который удерживается рабочими процессами веб-сервера.
Разберём по шагам, как отредактировать файл публикации default.vrd для корректного завершения или ограничения времени жизни сеансов. Файл публикаций находится в каталоге веб-сервера (Apache или IIS) и содержит параметр sessionPoolSettings.
Проанализируем основные параметры элемента sessionPoolSettings:
dontUse, платформа не будет сохранять сеанс в пуле, и он закрывается сразу после выполнения вызова. Значение use или auto активирует повторное использование.0 часто приводит к ошибкам и накапливанию зависших сеансов. Рекомендуется указывать явный таймаут (например, 20 секунд).Посмотрим на пример конфигурации секции пула сеансов в файле default.vrd:
<point name="MyWebService"
alias="ws1.1cws"
enable="true">
<sessionPoolSettings reuse="dontUse"
sessionTimeout="20"
maxSessions="10"
poolTimeout="5" />
</point>
Если требуется применить параметры ко всем сервисам публикации, тег sessionPoolSettings можно вынести на верхний уровень конфигурации default.vrd.
В процессе разработки веб-сервисов в параметры процедур и функций часто передаётся ОбъектXDTO. В отличие от стандартной структуры или массива 1С, данный объект создан на основе XSD-схемы, поэтому его внутренние свойства не разворачиваются стандартным образом в табло отладчика. Проанализируем практические способы просмотра данных XDTO-объекта.
Самый простой и эффективный способ просмотреть внутреннюю структуру и значения параметров — сериализовать ОбъектXDTO в строку XML с помощью объектов ЗаписьXML и ФабрикаXDTO.
Рассмотрим пример кода:
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ПараметрXDTO);
ТекстXML = ЗаписьXML.Закрыть();
Сформированную переменную ТекстXML можно легко скопировать из табло отладчика или выгрузить в текстовый файл для анализа.
Если переданный ОбъектXDTO формировался на стороне 1С и содержит типы платформы, вы можете декодировать его в прикладные объекты с помощью объекта СериализаторXDTO.
Посмотрим, как это реализуется в коде:
Значение1С = СериализаторXDTO.ПрочитатьXDTO(ПараметрXDTO);
После выполнения этой команды переменная Значение1С преобразуется в стандартный объект 1С (структуру, соответствие или массив) и будет полностью разворачиваться в дереве отладчика.
Если необходимо перебрать свойства объекта в цикле, воспользуемся коллекцией Свойства() и методом Получить() объекта ОбъектXDTO.
Разберём пример программного обхода:
Для Каждого Свойство Из ПараметрXDTO.Свойства() Цикл
ИмяСвойства = Свойство.Имя;
ЗначениеСвойства = ПараметрXDTO.Получить(Свойство);
КонецЦикла;
На этапе отладки боевых сервисов останавливаться точками останова не всегда удобно. В таком случае рекомендуем записывать полученный XML-пакет напрямую в журнал регистрации с помощью процедуры ЗаписьЖурналаРегистрации.
Рассмотрим пример записи входящего пакета:
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ПараметрXDTO);
ТекстXML = ЗаписьXML.Закрыть();
ЗаписьЖурналаРегистрации("ВебСервис.ВходящийПакет",
УровеньЖурналаРегистрации.Информация,,,
ТекстXML);
Использование описанных настроек и методов позволит эффективно управлять сеансами веб-сервисов 1С и оперативно отлаживать передаваемые XDTO-данные.