Сериализация данных в строку и из строки в стиле сообщения soap

#.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 , хотя он устарел и довольно не работает для многих сценариев (включая общие):