【发布时间】:2013-04-05 00:30:58
【问题描述】:
我已经看到这个问题出现了几次,但没有真正确定的答案(因为很可能没有)...我有一个 WCF 服务需要从 SQL 中返回大约 14,000 行数据,这些数据按基于列表的数组。
我的服务配置如下:
<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。
即使我明确地为 MaxItemsInObjectGraph 分配了一个最大整数...
我已经阅读了有关流式传输和分页的信息,但是单次返回的数据真的太多了吗?
【问题讨论】:
-
从用户的角度考虑一下,我真的要一次处理超过 200 行数据吗?答案很可能是否定的。
-
返回的数据是设计要求的...这家公司想知道在 (x) 和 (x) 日期之间销售了什么...
-
请注意,您还必须在客户端上执行此操作。请参阅此处(向下滚动以获取答案):social.msdn.microsoft.com/Forums/en-US/wcf/thread/… -
@MaxOvrdrv,我把它贴在上面...
-
是否必须在一条消息中传输?
标签: c# .net wcf web-services