The maximum string content length quota (8192) has been exceeded while reading XML data

原文: The maximum string content length quota (8192) has been exceeded while reading XML data

 

问题场景:在我们WCF服务发布后,我们要确保服务端以及客户端的配置文件允许合适大小的传输设置。笔者在发布WCF服务时,服务端的绑定未做传输大小的设置(采用了默认,maxStringContentLength默认大小为8192),而我们在传输序列化的数据时,大小超过了这个限制。

 读取 XML 数据时,超出最大字符串内容长度配额 (8192)。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性,可增加此配额。

 

问题原因:服务端或者客户端关于传输大小的未做设置,maxStringContentLength默认大小为8192,实际传输大于8192,由此产生异常。

 

解决方案:

1.确定是客户端还是服务端的限制。

 

2.在客户端或服务器的做如下配置:

 

<binding name="xxx" maxReceivedMessageSize="2147483647">



<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647"



maxNameTableCharCount="2147483647" />



security>



</binding>

代码中可修改如下:

  MyServiceClient service = null;

            //MyServiceClient service = new MyServiceClient();

            try

            {





                System.ServiceModel.Channels.CustomBinding bing = new System.ServiceModel.Channels.CustomBinding(

                        new System.ServiceModel.Channels.BindingElement[]{ 

                new BinaryMessageEncodingBindingElement(){ ReaderQuotas= new System.Xml.XmlDictionaryReaderQuotas {

                    MaxDepth=2147483647, 

                    MaxStringContentLength=2147483647,  

                    MaxArrayLength=2147483647, 

                    MaxBytesPerRead=2147483647}},

                new HttpTransportBindingElement()

                        });



                bing.Name = "CustomBinding_DataService";

                EndpointAddress address = new EndpointAddress(http://www.xxx.com/MyService.svc);



                service = new MyServiceClient(bing, address);

          

            }

            catch (Exception ex)

            {

                throw ex;

            }

 


 

你可能感兴趣的:(content)