2010-01-21 5 views
0

Je souhaite déboguer pourquoi mon application envoie autant de données en utilisant WCF en dessous. J'ai essayé d'examiner les journaux de suivi WCF et d'examiner le trafic avec Fiddler, mais j'ai besoin d'une trace de pile menant au code client incriminé.Quel est le point d'interception le plus bas dans la pile d'exécution WCF?

Donc, j'ai installé un IClientMessageInspector personnalisé, mais comment puis-je connaître la taille des données réelles donné une instance Message? Le ToString() de l'instance Message donnée renvoie un XML, mais je ne suis pas sûr si sa taille est elle.

Existe-t-il un moyen de se connecter à la pile WCF plus profondément et plus près de l'envoi réel du message?

MISE À JOUR

Trouvé cette question SO 1 an, drôle, mais personne ne répondit - https://stackoverflow.com/questions/457683/message-size-after-serialize

+0

pouvez-vous ajouter un comportement à votre hôte, pas à votre client? –

+0

Oui, je peux, j'ai commencé avec le client, mais je peux faire la même chose avec le serveur. – mark

+0

Envoi de gros messages avec exception du côté client? Cette exception a une trace de pile, n'est-ce pas ce que vous cherchez? –

Répondre

1

Vous mentionnez les traces journaux - mais avez-vous un message permis exploitation forestière? Avec cela en place, vous devriez avoir une visibilité claire des messages sous-jacents, de sorte que vous devriez être en mesure de voir exactement quelles sont les données sur le fil?

+0

Je veux aussi une trace de pile, de préférence en direct. – mark

+0

@mark - mais à quel moment? Vous mentionnez la taille du message - c'est une préoccupation de transport, pas un problème client/serveur ...? –

+0

Merci pour la clarification, y at-il un moyen d'accrocher dans le transport et de voir ce qui est transféré exactement? Ou IClientMessageInspector et IDispatchMessageInspector sont-ils suffisants? Bien que, je ne peux pas comprendre comment obtenir la longueur de l'instance de message donnée ... – mark

0

Vous pouvez utiliser l'intercepteur de message, mais notez que "le corps d'un message ne peut être consommé qu'une seule fois" (voir msdn).

Essentiellement, vous devez utiliser Message.CreateBufferedCopy() pour créer une copie du message à traiter comme vous le souhaitez, y compris en appelant ToString() pour le vider quelque part. En outre, lorsque les intercepteurs de messages sont chaînés, il se peut que vous ne voyiez pas le message d'origine, mais plutôt celui que l'intercepteur précédent a créé/modifié. Donc, si vous voulez juste voir ce qui est sur le fil, vous êtes probablement mieux avec le WCF tracing intégré, comme Marc l'a déjà dit.

+0

Je suis conscient de la facilité de traçage, mais je veux examiner le message réel pendant une session en cours de débogage. – mark

Questions connexes