wcfwcf-bindingmaxreceivedmessagesize

What is the purpose of the MaxReceivedMessageSize on the client-side?


I did a test against a WCF server where the response from the server exceeds the MaxRecievedMessageSize property defined in the client-side binding object, resulting in a CommunicationException. I examined request and response using Fiddler. Despite exceeding the MaxRecievedMessageSize, the entirety of the response is sent to the client.

I believe I am missing the point of this behavior. As I see it, no bandwidth is saved as the data has already been received. The client application could have processed the data but the client binding has discarded before it is given to the application.

If saving bandwidth is not the purpose of the MaxReceivedMessageSize on the client-side, what is it for?


Solution

  • The answer is simple: security.

    It would indeed be better for the bandwidth if your client could say to the server: "oh, by the way, don't bother sending me replies bigger than X bytes", but that is something they didn't implement :-)

    And even if it was, what if the server has a bug, or is intentionally misbehaving... What if the server returned a 2 TB string? Your client would then try to allocate a 2TB buffer to receive the request and will probably get a OutOfMemoryException. That would bring your client down.