При пошаговой отладке веб-сервисов в 1С разработчики часто сталкиваются с ситуацией, когда после остановки на точке останова соединение мгновенно разрывается, а вызывающая сторона возвращает ошибку Failure when receiving data from the peer (код ошибки cURL 56). Выясним причину такого поведения и разберем по шагам варианты решения проблемы.
Проанализируем ситуацию: когда выполнение программного кода останавливается в точке останова внутри метода веб-сервиса, сервер перестает передавать данные вызывающему приложению до тех пор, пока программист не продолжит выполнение. В этот момент срабатывают защитные механизмы сетевого взаимодействия:
Timeout, сервер разрывает соединение, считая дочерний рабочий поток зависшим.Рассмотрим код подключения к веб-сервису в вызывающей базе. При создании прокси-объекта необходимо явно передать параметр таймаута в секундах, чтобы клиент не обрывал связь во время анализа переменных в конфигураторе.
Если подключение выполняется динамически через WSОпределения, передадим таймаут в конструктор WSПрокси:
Определения = Новый WSОпределения(URL_WSDL, Пользователь, Пароль);
ТаймаутВСекундах = 3600; // 1 час на отладку
WSПрокси = Новый WSПрокси(
Определения,
URIПространстваИмен,
ИмяСервиса,
ИмяПорта,
,
,
ТаймаутВСекундах
);
Ответ = WSПрокси.ВыполнитьОперацию(ВходныеДанные);
Если используется статическая ссылка из дерева метаданных (ветка WS-ссылки), укажем таймаут в методе получения прокси:
ТаймаутВСекундах = 3600;
WSПрокси = WSСсылки.ИмяСервиса.ПолучитьWSПрокси(ИмяСервиса, ИмяПорта, ТаймаутВСекундах);
Ответ = WSПрокси.ВыполнитьОперацию(ВходныеДанные);
Разберем параметры веб-сервера Apache, которые управляют временем удержания соединений. Откроем файл httpd.conf и скорректируем директивы времени ожидания:
Timeout 3600
KeepAliveTimeout 300
Для предотвращения сбоев сетевых сокетов на операционных системах Windows при работе с модулем 1С рекомендуется добавить следующую директиву в конфигурацию Apache:
Win32DisableAcceptEx
После внесения изменений обязательно перезапустим службу веб-сервера Apache.
Посмотрим на наиболее надежный архитектурный прием, исключающий влияние сетевых таймаутов и веб-сервера на процесс разработки. Для этого разделим точку входа веб-сервиса и его прикладную логику:
ИнтеграцияСервер).ИнтеграцияСервер в режиме обычного или управляемого приложения.При таком подходе отладка выполняется в штатном режиме толстого или тонкого клиента 1С без риска разрыва соединения сторонними веб-серверами.