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