前段时间朋友有个项目,第三方用webservice提供的接口,其中一个是返回数据列表的接口,返回的数据量比较大,在直接调用webservice时并没有任何问题。
但通过C# ashx对webservice接口进行二次封装,提取返回的json格式数据后,返回了主要内容为:
error in deserializing body of reply message
的错误提示。
经对接口进行跟踪调试发现,返回的数据并不全,导致格式出错出现上述错误。
因为C#默认限制了数据传传输的最大长度,超出这个限制的时候就会出现上述错误。返回那么大的数据量APP端也受不了啊,也不知道提供接口的是怎么想的!
出现这种问题,可以修改web.config,注意加粗部分(具体数值根据实际情况调整):
<bindings>
<basicHttpBinding>
<binding name="BasicBinding"
closeTimeout="00:01:00"
openTimeout="00:01:00"
receiveTimeout="00:10:00"
sendTimeout="00:01:00"
allowCookies="false"
bypassProxyOnLocal="false"
hostNameComparisonMode="StrongWildcard"
maxBufferSize="999999"
maxBufferPoolSize="999999"
//对Web层的传递数据量,解决了从服务器通过webservice(wcf)下载大容量数据的问题
maxReceivedMessageSize="999999"
messageEncoding="Text"
textEncoding="utf-8"
transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas
maxDepth="999999"
maxStringContentLength="999999"
maxArrayLength="999999"
maxBytesPerRead="999999"
maxNameTableCharCount="999999" />
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
虽然可以解决此类问题,但是对于返回大数据量的接口,建议加上页索引和页大写参数分页获取以提高效率。
