При работе с веб-сервисами через объекты WSПрокси в 1С часто возникает необходимость увидеть итоговое XML-сообщение, которое фактически уходит на сервер. Это важно для отладки, проверки корректности формирования заголовков Header и структуры Envelope. Рассмотрим, как решить эту задачу.
Важно понимать, что платформа 1С на уровне WSПрокси скрывает от разработчика процесс формирования HTTP-запроса. Методы сериализации ФабрикаXDTO позволяют работать только с отдельными объектами или параметрами. Сериализовать всё сообщение целиком через стандартные механизмы 1С до момента отправки невозможно, так как платформа самостоятельно собирает пакет в памяти на низком уровне.
Поскольку 1С не предоставляет API для перехвата итогового XML-пакета, профессиональным стандартом является использование инструментов «снифферов» (прокси-серверов), которые стоят между 1С и целевым веб-сервисом.
XML в удобном виде.Чтобы увидеть запрос в 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) сформирован верно, вы можете сериализовать его в строку локально, не отправляя запрос. Это полезно для проверки структуры до вызова метода.
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку("UTF-8");
Прокси.ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ВашОбъектXDTO);
ТекстXML = ЗаписьXML.Закрыть();
Сообщить(ТекстXML);
Однако помните: этот метод покажет лишь структуру конкретного объекта, а не весь итоговый запрос веб-сервиса.
Если для интеграции критически важно иметь полный контроль над XML-текстом и возможность логировать его до отправки, лучшим решением будет отказаться от WSПрокси в пользу прямого использования объектов HTTPСоединение и HTTPЗапрос.
В этом случае вы:
XML как обычную строковую переменную.ОтправитьДляОбработки() или ВызватьHTTPМетод().Это дает абсолютную прозрачность процесса, так как вы работаете с сырыми данными, которые сами же и подготовили.
Подводя итог, можно сказать, что при использовании WSПрокси единственным надежным способом увидеть финальный SOAP запрос является применение Fiddler или аналогичных прокси-серверов. Если же проект требует строгого логирования и контроля структуры, рекомендуем переходить на формирование запросов вручную через HTTPЗапрос.