При интеграции 1С с внешними сайтами или сторонними системами через Web-сервисы разработчики нередко сталкиваются с ситуацией: сеанс создается и моментально завершается в течение одной секунды, при этом в стандартном журнале регистрации не фиксируется никаких ошибок, а управление даже не доходит до исполняемого метода веб-сервиса. Разберем причины такого поведения платформы и пошагово рассмотрим способы диагностики и устранения проблемы.
Если в журнале регистрации появляется запись о старте и немедленном завершении сеанса без вызова целевой процедуры, проблема локализуется на уровне инициализации сессии, проверки прав или синтаксического разбора входящего пакета:
SOAP Fault (HTTP 500 или 400). Сеанс завершается мгновенно, не передавая управление в модуль веб-сервиса, и стандартный Журнал регистрации такую ошибку не записывает.УстановкаПараметровСеанса и события модуля сеанса. Если внутри этих процедур выполняется код, рассчитанный исключительно на клиентские приложения (например, обращение к несуществующим параметрам сеанса или неинициализированным переменным), соединение аварийно прерывается.maxAllowedContentLength в IIS или LimitRequestBody в Apache), а также повреждения в файле публикации default.vrd.Для начала проверим, корректно ли опубликован веб-сервис на веб-сервере. Откроем ссылку на WSDL-описание в браузере. Адрес формируется по следующему шаблону:
http://адрес_сервера/имя_базы/ws/ИмяВебСервиса.1cws?wsdl
Проанализируем результат обращения:
401 Unauthorized или 403 Forbidden — проверяем корректность логина, пароля и назначенных ролей пользователя 1С.404 Not Found или 500 Internal Server Error — проверяем корректность файла default.vrd и настройки обработчика модуля 1С на веб-сервере.Чтобы точно убедиться, доходит ли выполнение до кода метода веб-сервиса, добавим явную запись в Журнал регистрации в самую первую строку исполняемой экспортной функции модуля веб-сервиса:
Функция ВыполнитьОбмен(ВходящиеДанные) Экспорт
ЗаписьЖурналаРегистрации("ВебСервис.Старт",
УровеньЖурналаРегистрации.Информация,,,
"Вызов функции ВыполнитьОбмен успешно получен");
// Основная логика обработки данных
Возврат Истина;
КонецФункции
Если после повторного вызова со стороны сайта запись в журнале регистрации так и не появилась, значит, отказ происходит до передачи управления в тело функции.
Чтобы исключить влияние сторонней CMS или скрипта сайта, выполним прямой вызов метода через утилиту SoapUI или проанализируем сырой трафик с помощью Fiddler / Wireshark:
<soap:Fault>, в котором будет указано конкретное поле или тип, вызвавший сбой парсинга.Если SoapUI недоступен или ошибка воспроизводится только в боевом потоке данных, настроим сбор Технологического журнала. В отличие от Журнала регистрации, ТЖ перехватывает системные исключения десериализации и инициализации контекста.
Создадим или дополним файл logcfg.xml в каталоге настроек платформы 1С:
<config xmlns="http://v8.1c.ru/v8/tech-log">
<dump create="false"/>
<log location="C:\Logs\1C_WS" history="24">
<event>
<eq property="name" value="EXCP"/>
</event>
<event>
<eq property="name" value="EXCPCNTX"/>
</event>
<event>
<eq property="name" value="VRSREQUEST"/>
</event>
<event>
<eq property="name" value="VRSRESPONSE"/>
</event>
<property name="all"/>
</log>
</config>
События VRSREQUEST и VRSRESPONSE зафиксируют точное содержимое входящего HTTP-запроса и ответ платформы, а события EXCP покажут внутреннее исключение, приведшее к мгновенному разрыву сессии.
Если веб-сервер и WSDL настроены корректно, а пакет валиден, проверим процедуру инициализации сеанса:
УстановкаПараметровСеанса общего модуля сеанса.