I was recently debugging an issue with a WCF service I had written, where it appeared that POSTing data to the service returned a HTTP 400 Bad Request error. There are several reasons you may experience such an error but mine was peculiar in that it wasn’t always repeatable and depended on what the client application sent to the service.
On closer investigation, it turned out I was hitting the default
maxReceivedMessageSize (set to 65536 bytes) when POSTing the data on the
basicHttpBinding binding I was using, as shown on the Fiddler trace above (highlighted in red) — but only just.
The WCF service was defined by an endpoint using the
basicHttpBinding binding, so it was a case of adding the following:
<system.serviceModel><bindings><basicHttpBinding><binding name="" maxReceivedMessageSize="262144"></binding></basicHttpBinding></bindings>...</system.serviceModel>
Here I am setting the default
basicHttpBinding binding to accept messages up to 256KB in size. This immediately fixed the problem. This comes with a caveat though as setting this value too high on production code could increase your exposure to possible DoS attacks from large payloads.