2009-10-15 4 views
1

Nous avons quelques objets qui sont exposés par les services WCF (en utilisant wsHttpBinding) et sérialisés en XML. Voici un extrait d'un d'entre eux:Analyse d'un graphe d'objet sérialisé XML pour savoir ce qui occupe le plus d'espace

[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 ... 

} 

Comme vous pouvez le voir, il y a beaucoup de collections et quelques-uns des objets contenus ont enfant d'autres objets sous eux. Lorsque nous comparons ces données à celles de notre production, nous constatons que, bien que la plupart des enregistrements Person soient corrects, certains se traduisent par de très gros messages sérialisés (> 500 Ko, par exemple).

Maintenant, je pense que nous devrons commencer à élaguer notre graphique d'objets, mais j'aimerais savoir quels bits de données contribuent le plus au message sérialisé. Par exemple, s'agit-il de la liste des objets Address, ou s'agit-il d'un bloc de données dans les objets InternationalExperience. Connaissez-vous un outil qui va capturer et analyser les messages XML qui sont envoyés, afin que je puisse trouver ce qui occupe le plus d'espace?

Répondre

0

Il ya quelque temps, j'ai écrit un article for CodeProject où je décris comment construire un hébergeur WCF (pas votre problème) et mis en œuvre un IEndpointBehavior pour afficher le contenu du message.

Peut-être que vous pouvez essayer.

+0

Merci pour la suggestion, mais ma question n'est pas vraiment sur la façon d'obtenir le message. Le traçage WCF le fera pour moi, ou je peux même charger un DataContractSerializer, sérialiser dans un MemoryStream et ensuite écrire sur le disque. Je cherche des conseils sur l'analyse du XML capturé. –

0

Oui, il existe un outil. Vous pouvez activer la journalisation des messages dans l'outil de fichier de configuration WCF et inspecter les messages volumineux. SvcTraceViewer vous permet d'analyser les données de trace. Rechercher MSDN pour "Message Logging".