解决wcf数据量过大时出现的错误
2015-6-12 9:36碰到wcf接口调用出错,错误信息“接收对 http://test0019.httest.loc:2257/MemberService.svc 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。有关详细信息,请参见服务器日志。”
检查发现,查询到的数据量大的时候就出这个错误,数据量小时候正常。按照网上多方查找,最后解决办法如下。
web.config文件binding做如下修改
<bindings> <wsHttpBinding> <binding name="wsHttpBindingConfiguration" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" > <security mode="None" /> <readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647"/> </binding> </wsHttpBinding> </bindings>
behavior中添加<dataContractSerializer maxItemsInObjectGraph="65536000" />修改后如下
<behavior name="Htinns.CRM.BIL.WCF.MemberServiceBehavior"> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="false" /> <serviceThrottling maxConcurrentCalls="80" maxConcurrentInstances="180" maxConcurrentSessions="100"/> <dataContractSerializer maxItemsInObjectGraph="65536000" /> </behavior>
用wcf test client调用后发现仍然报错,错误信息如下:
“已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性。”
按照提示修改客户端的配置,最后得以解决。修改后客户端配置如下:
<bindings> <wsHttpBinding> <binding name="WSHttpBinding_IMemberService" sendTimeout="00:05:00" maxReceivedMessageSize="2147483647"> <security mode="None" /> </binding> </wsHttpBinding> </bindings>