2010-05-25 2 views
3

Pendant que je fais des invocations SOAP ou REST à WCF, j'aimerais que la pile de canaux à chaque extrémité (client et serveur) enregistre le sur le fil taille des données reçues. Donc je devine que j'ai besoin d'ajouter un comportement personnalisé à la pile de canaux de chaque côté. C'est-à-dire, du côté serveur, j'enregistrerais la taille annoncée de l'en-tête IP reçue (cumulativement, jusqu'à ce que tous les paquets pour ce message soient reçus). Côté client, j'enregistrais la taille annoncée de l'en-tête IP retournée par le serveur (même processus de sommation). Mais cela présuppose que cette information est visible pour un comportement WCF personnalisé au niveau de la pile de canaux. Peut-être est-ce seulement visible au niveau d'ASP.NET (à une couche sous WCF)? Ou peut-être que WCF recueille déjà cette information "taille totale du message", et je peux simplement accéder à une propriété? En bref, est-ce que quelqu'un a un autre aperçu sur si et comment cette information est accessible? Je dois préciser que ces données de «taille» seront recueillies dans un environnement de production, dans le cadre d'appels de logique métier réguliers. Ainsi, je ne suis pas intéressé par le solutions proposed elsewhere.Taille de messages dans WCF

Cette question est liée à ma précédente bandwidth question.

+0

Je ne suis pas sûr que vous pouvez entrer si profondément dans le protocole de transport (TCP) avec WCF. Cependant, il devrait être assez facile de collecter la taille réelle de la charge utile. Est-ce que c'est ce que vous cherchez? – Strelok

+0

Je me contenterai de la taille de la charge utile, si c'est tout ce que je peux obtenir (j'ajouterais probablement une taille de surdébit estimée sur le réseau, pour inclure le reste de la taille du paquet). –

Répondre

1

Je pense que le seul endroit où vous pourriez potentiellement obtenir cette information (ou aussi près que possible) serait avec un MessageEncoder personnalisé qui a enveloppé un de ceux fournis par le système et a enregistré cette information. Je pense que ce ne serait pas très difficile à faire, mais je pense qu'il serait ennuyeux de le faire car il faudrait utiliser des liaisons personnalisées pour cela (je pense qu'il y aurait peut-être un moyen de l'accrocher avec un comportement, pas certain). Peut-être vaut-il la peine de souligner que cela laisserait de côté certaines données sur le réseau telles que les en-têtes HTTP et celles qui sont envoyées par le transport mais qui ne font jamais partie du message lui-même.

8

Si vous set up WCF tracing and message logging, vous pouvez consulter le fichier svclog avec le WCF Service Trace Viewer et trouver la longueur du contenu de la requête HTTP dans ce journal des messages:

alt text http://i50.tinypic.com/xfna06.png

+0

Puisque je vais essayer de capturer cette information dans un environnement de production, je ne serai pas en mesure d'activer la fonction de traçage. Cependant, si je pouvais recueillir la même "longueur de contenu" à partir d'un comportement personnalisé que j'ajoute, cela pourrait être ce dont j'ai besoin. –

+2

Cela ne fonctionne que si vous utilisez une liaison HTTP. – markmnl

0

Je suis la taille du message en utilisant Fiddler. Cela semblait être la manière la plus discrète car elle ne nécessite aucun changement de votre application ou de vos configs.

Il suffit de lancer l'outil, faire la demande et lire les statistiques Octets reçus

La seule autre chose que vous pourriez avoir à faire est de décoder le corps du message si elle est codée. Lors de l'inspection de la demande, il y a un message Le corps de la réponse est codé. Cliquez pour décoder. Pour ce faire.

Questions connexes