Как получить полный текст SOAP-запроса, отправляемого из 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с веб-сервисами через объекты WSПрокси в 1С часто возникает необходимость увидеть итоговое XML-сообщение, которое фактически уходит на сервер. Это важно для отладки, проверки корректности формирования заголовков Header и структуры Envelope. Рассмотрим, как решить эту задачу.

Ограничения штатных средств 1С

Важно понимать, что платформа 1С на уровне WSПрокси скрывает от разработчика процесс формирования HTTP-запроса. Методы сериализации ФабрикаXDTO позволяют работать только с отдельными объектами или параметрами. Сериализовать всё сообщение целиком через стандартные механизмы 1С до момента отправки невозможно, так как платформа самостоятельно собирает пакет в памяти на низком уровне.

Использование внешних прокси-инструментов

Поскольку 1С не предоставляет API для перехвата итогового XML-пакета, профессиональным стандартом является использование инструментов «снифферов» (прокси-серверов), которые стоят между 1С и целевым веб-сервисом.

  1. Fiddler: Рекомендуемый инструмент для большинства задач. Он позволяет перехватывать HTTP/HTTPS трафик, детально просматривать заголовки запросов и тело XML в удобном виде.
  2. Wireshark: Более мощный инструмент для анализа сетевых пакетов, однако он требует более глубоких знаний сетевых протоколов.

Настройка 1С для работы через прокси

Чтобы увидеть запрос в Fiddler, необходимо принудительно направить трафик из 1С через него. Для этого используем объект ИнтернетПрокси при инициализации WSПрокси.

Разберем пример кода для настройки прокси:


ПроксиСервер = Новый ИнтернетПрокси;
ПроксиСервер.Установить("http", "127.0.0.1", 8888); // Стандартный порт Fiddler
ПроксиСервер.Установить("https", "127.0.0.1", 8888);

Определение = Новый WSОпределения("http://example.com/service?wsdl");
Прокси = Новый WSПрокси(Определение, "http://namespace", "ServiceName", "ServicePort", ПроксиСервер);

После такой настройки все запросы, инициируемые переменной Прокси, будут проходить через Fiddler, где вы сможете увидеть полный текст запроса с Envelope, Header и Body.

Локальная проверка параметров через ФабрикуXDTO

Если вам нужно убедиться, что конкретный сложный параметр (объект XDTO) сформирован верно, вы можете сериализовать его в строку локально, не отправляя запрос. Это полезно для проверки структуры до вызова метода.


ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку("UTF-8");
Прокси.ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ВашОбъектXDTO);
ТекстXML = ЗаписьXML.Закрыть();
Сообщить(ТекстXML);

Однако помните: этот метод покажет лишь структуру конкретного объекта, а не весь итоговый запрос веб-сервиса.

Альтернативный подход: формирование HTTP-запроса вручную

Если для интеграции критически важно иметь полный контроль над XML-текстом и возможность логировать его до отправки, лучшим решением будет отказаться от WSПрокси в пользу прямого использования объектов HTTPСоединение и HTTPЗапрос.

В этом случае вы:

  1. Формируете тело XML как обычную строковую переменную.
  2. Сохраняете эту переменную в лог (файл или технологический журнал) перед отправкой.
  3. Передаете строку в метод ОтправитьДляОбработки() или ВызватьHTTPМетод().

Это дает абсолютную прозрачность процесса, так как вы работаете с сырыми данными, которые сами же и подготовили.

Заключение

Подводя итог, можно сказать, что при использовании WSПрокси единственным надежным способом увидеть финальный SOAP запрос является применение Fiddler или аналогичных прокси-серверов. Если же проект требует строгого логирования и контроля структуры, рекомендуем переходить на формирование запросов вручную через HTTPЗапрос.

← На главную