我已经看到这个问题弹出了几次但没有真正明确的答案(因为很可能没有)...我有一个WCF服务需要从SQL中返回大约14,000行数据列表与LT;>基于阵列。
我的服务配置如下:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IParts" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
</serviceBehaviors>
</behaviors>
我的客户端配置如下:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IParts" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost/RasFuseService/Parts.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IParts"
contract="MyParts.IParts" name="BasicHttpBinding_IParts" />
</client>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
有些事情是不对的,因为我收到了错误:
格式化程序在尝试反序列化消息时抛出异常: 尝试反序列化参数http://tempuri.org/:GetSurplusECMResult时出错。 InnerException消息是'对象图中可以序列化或反序列化的最大项数是'65536'。 更改对象图或增加MaxItemsInObjectGraph配额。 ”。有关详细信息,请参阅InnerException。
即使我明确地使用max int ...
分配MaxItemsInObjectGraph我已经阅读过关于流媒体和分页的内容,但实际上这个数据真的太多了吗?
答案 0 :(得分:3)
想出来( Slapped额头) 我最终在客户端写了一个错误的条目。客户端的正确语法应该是:
<behaviors>
<endpointBehaviors>
<behavior >
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</endpointBehaviors>
</behaviors>
不
<behaviors>
<serviceBehaviors>
<behavior>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
</behaviors>
它现在返回并反序列化我的大数组而不抱怨......
答案 1 :(得分:0)
我有一个案例,我的WCF服务返回原始表格数据,一次只有几兆字节。
XML序列化很糟糕......很多元素和浪费的空间,也很慢。在这种情况下,我处理了自己的响应生成,并返回格式化为CSV数据的数据。客户端生成,发送和解析它的速度要快得多。
我正在使用REStful WCF(这是在ASP.NET替换WCF for REST之前),所以我只是从我的WCF方法返回了一个Stream。
答案 2 :(得分:0)
在您的客户端配置中,您的行为有一个名称,但您似乎没有使用该名称。在某处使用名称或省略名称,使您的行为成为服务配置中的默认行为。