2009-10-15 5 views
1

У нас есть некоторые объекты, которые предоставляются службами WCF (с использованием wsHttpBinding) и сериализованы в XML. Вот выдержка из одного из них:Анализ XML-сериализованного графа объектов для определения того, что занимает большинство пространства

[DataContract] 
public class Person 
{ 
    [DataMember] private string _forename; 
    [DataMember] private string _middleInitial; 
    [DataMember] private string _surname; 
    [DataMember] private List<EducationRecord> _educationRecords; 
    [DataMember] private List<Address> _addresses; 
    [DataMember] private List<InternetAddress> _internetAddresses; 
    [DataMember] private List<PhoneNumber> _phoneNumbers; 
    [DataMember] private List<InternationalExperience> _internationalExperience; 
    [DataMember] private List<ProfessionalQualification> _professionalQualifications; 
    [DataMember] private List<KnownLanguage> _knownLanguages; 

    // And there's more ... 

} 

Как вы можете видеть, есть много коллекций, и некоторые из содержащихся объектов, еще больше дочерних объектов под ними. Когда мы запускаем это против наших производственных данных, мы обнаруживаем, что, хотя большинство записей Person в порядке, есть некоторые, которые переводят на очень большие сериализованные сообщения (например, 500 КБ).

Теперь я ожидаю, что нам нужно будет обрезать наш объектный граф, но я хотел бы узнать, какие биты данных вносят наибольший вклад в сериализованное сообщение. Например, это список объектов Address, или это некоторый фрагмент данных в объектах InternationalExperience.

Вы знаете инструмент, который будет захватывать и анализировать отправляемые XML-сообщения, чтобы я мог узнать, что занимает больше всего пространства?

ответ

0

некоторое время назад я написал article for CodeProject, где описываю, как построить хостинг WCF (а не вашу проблему) и внедрил IEndpointBehavior для отображения содержимого сообщения.

Возможно, вы можете попробовать.

+0

Спасибо за предложение, но мой вопрос не в том, как получить сообщение. Трассировка WCF сделает это для меня, или я могу даже загрузить DataContractSerializer, сериализовать в MemoryStream и затем записать на диск. Я ищу совет по анализу захваченного XML. –

0

Да, есть инструмент. Вы можете включить ведение журнала сообщений в инструменте файла конфигурации WCF и проверить большие сообщения. SvcTraceViewer позволяет анализировать данные трассировки. Поиск в MSDN для «Ведение журнала сообщений».