views:

69

answers:

2

While I'm making SOAP or REST invocations to WCF, I'd like to have the channel stack on either end (client and server) record the on-the-wire size of the data received. So I'm guessing I need to add a custom behavior to the channel stack on either side. That is, on the server side I'd record the IP-header advertised size that was received (cumulatively, until all packets for that message are received). On the client side I'd record the IP-header advertised size that was returned from the server (same summation process).

But this presupposes that this information is visible to a custom WCF behavior at the channel stack level. Perhaps it is only visible at the level of ASP.NET (at a layer beneath WCF)? Or perhaps WCF already collects this "total message size" info, and I can simply access a property?

In short, does anyone have any further insight on if and how this information is accessible? I must qualify that this "size" data will be collected in a production environment, as part of regular business logic calls. Thus I am not interested in the solutions proposed elsewhere.

This question is related to my earlier bandwidth question.

A: 

I think the only place where you could potentially get this information (or as close to it as possible) would be with a custom MessageEncoder that wrapped one of the system-provided ones and recorded that information.

It wouldn't be very hard to do, I think, but it would be annoying to hook as you'd need to use custom bindings for that, I think (or there might be a way to hook it in with a behavior, not sure).

Might be worth pointing out that this would still leave out some on-the-wire data like HTTP headers and such that are sent by the transport but never actually part of the message itself.

tomasr
A: 

If you set up WCF tracing and message logging, you can inspect the svclog file with the WCF Service Trace Viewer and find the HTTP request content length in that message log:

alt text

marc_s
Since I will be trying to capture this information in a production environment, I will not be able to turn on the tracing feature. However, if I could collect the same "Content-Length" from a custom behavior I add, then that might be what I need.
Brent Arias