WCF and MaxStringContentLength on XmlDictionaryReaderQuotas
When sending xml-data over WCF using a string, i bumped into the following error :
The formatter threw an exception while trying to deserialize the message: Error in deserializing body of
request message for operation 'Test'. The maximum string content length quota (8192) has been exceeded
while reading XML data. This quota may be increased by changing the MaxStringContentLength property
on the XmlDictionaryReaderQuotas object used when creating the XML reader.
Right. This sounded like some foreign language where i can't even make out the syllables. I am using WCF with a NetTcpBinding
, so after extensive googling i was able to produce the following C# code :
ushort myport= 27001;
const Int32 myMaxMessageSize = 6553500;
string address = String.Format("net.tcp://localhost:9000/myservice/{0}", myport);
XmlDictionaryReaderQuotas quotas = new XmlDictionaryReaderQuotas();
quotas.MaxStringContentLength = myMaxMessageSize;
NetTcpBinding binding = new NetTcpBinding();
binding.ReaderQuotas = quotas;
binding.MaxReceivedMessageSize = myMaxMessageSize;
binding.MaxBufferSize = myMaxMessageSize;
m_factory = new ChannelFactory<imyservicecontract>(binding);
m_proxy = m_factory.CreateChannel(new EndpointAddress(address));
Setting the MaxStringContentLength
alone doesn't cut it. Once your buffer grows larger than 65K (the default for MaxBufferSize
and MaxReceivedMessageSize
) you will run into errors again. So that's why i opted to change those as well.
Hope this helps :)