#.net #web-services #serialization #soap #xml-serialization
#.net #веб-сервисы #сериализация #soap #xml-сериализация
Вопрос:
У меня есть прокси веб-службы. На этом прокси есть метод, который принимает два пользовательских типа. Когда я вызываю веб-службу, генерируется сообщение soap.
В моем сценарии я записываю это сообщение soap вручную (с помощью fiddler). Я хотел бы иметь возможность десериализовать строку, содержащую это сообщение soap (которое я прочитал из созданного вручную файла), обратно в экземпляры моих двух исходных типов.
Я знаю, что это достаточно легко сделать с помощью Xml DOM, XPath и Xml-сериализации для этих двух типов. Я уже делаю это, хотя в настоящее время с двумя отдельными файлами. Я хотел бы объединить их и избежать ручного форматирования захваченного сообщения Soap.
Есть ли более автоматический способ использовать существующую инфраструктуру Soap для выполнения этой десериализации? Я хотел бы написать этот код сериализации один раз и просто ожидать, что он сработает.
Ответ №1:
Появляется .Net Framework не предоставляет это простым в использовании способом. Пользовательский код, который записывает / считывает данные (в SoapHttpClientProtocol
и SoapServerProtocol
), не предоставляется пользователю напрямую.
Вы можете использовать этот код, чтобы, по крайней мере, заставить запрос правильно отображать:
XmlTypeMapping xmlTypeMapping = new SoapReflectionImporter()
.ImportTypeMapping(typeof(T));
var xmlSerializer = new XmlSerializer(xmlTypeMapping);
Остальную часть сериализации / десериализации вам придется выполнить самостоятельно (написав заголовок и тело SOAP с помощью пользовательского кода и пропустив программу чтения XML вперед к вашему контенту соответственно).
Вы также могли бы попробовать использовать SoapFormatter
, хотя он устарел и довольно не работает для многих сценариев (включая общие):