what did i learn today
Uncategorized wcf csharp
WCF maximum string length

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 :)

More ...