WCF и XmlSerialization и XmlWriterSettings

#wcf #xml-serialization

#wcf #xml-сериализация

Вопрос:

У меня есть веб-служба RESTful WCF (использующая существенно модифицированный стартовый набор WCF Rest), а контракты с данными представляют собой простые POCO, помеченные [Serializable] и [XMLType] (с элементами, помеченными [XmlElement] или [XmlAttribute], где это уместно).

Где-то внутри WCF создается экземпляр XmlSerializer, который генерирует выходные данные без отступов или интервалов между узлами XML, что хорошо для автоматизированных процессов, но усложняет отладку, поскольку мне приходится вручную форматировать вывод XML самостоятельно.

Я хочу использовать XmlWriterSettings, чтобы он автоматически форматировал XML перед отправкой по каналу, но я не вижу, где я мог бы его ввести.

Я использовал Reflector, чтобы найти, где в WCF создается экземпляр XmlSerializer, и он отображается внутри нескольких вложенных внутренних классов, включая XmlSerializerOperationBehavior, но помимо этого я застрял.

Ta!

Комментарии:

1. Что вы используете для просмотра XML? Почему бы просто не просмотреть его в редакторе XML (например, Visual Studio)? Или посмотрите на это в отладчике с помощью визуализатора XML.

Ответ №1:

XmlWriterSettings Объект передается конструктору не в XmlSerializer , а в XmlWriter , который затем будет передан сериализатору, когда придет время записать объект. Место, где вы можете это изменить, — это пользовательский кодировщик сообщений (отвечает за преобразование между набором XML-информации в сообщении и фактическими байтами в проводе). Одним из хороших примеров пользовательского кодировщика, который создает XmlWriter экземпляр, является «Пользовательский кодировщик текста«.

Ответ №2:

Я думаю, вы можете управлять полным выводом XmlSerializer, который WCF использует для создания транскрипции сообщения. Подсказки и примеры приведены в http://msdn.microsoft.com/en-us/magazine/cc163569.aspx .