返回从WCF设置的大型collectionresult

时间:2016-09-04 12:13:57

标签: json xml wcf wcf-data-services wcf-binding

我正在尝试从WCF服务返回大型结果集。大结果集可能会有500K记录,每条记录将有150列。

我知道通过配置WCF绑定,我们可以返回大的结果集。但我不确定这个限制。我试过这个场景,但是错误增加了" maxItemsInObjectGraph"属性甚至我将值设置为" 2147483647"这个属性。我搜索了备用选项,发现可以使用Binding的messageEncoding和transferMode属性来实现。我试过和#34; Mtom"和" StreamResponse"但我不确定它是如何起作用的?

我还提到了this链接,但不想分页,因为我的客户想要一次性获取数据。

所以结论是:

result

您的意见将受到赞赏。

谢谢!

1 个答案:

答案 0 :(得分:0)

  1. 您可以从WCF服务返回大对象集。考虑到传输大量数据,WebAPI或其他.NET服务框架没有优势。
  2. StreamResponse是您的最佳选择。它会逐部分地传输消息,这样您就不会在线路上同时拥有所有500K记录。它是一个传输层选项,因此对于客户端来说,他似乎立刻得到了整个消息。您可以通过编辑绑定的MaxBufferSize属性来管理该部分大小。 要最小化数据大小,您还可以使用BinaryMessageEncoding压缩它。

    <customBinding>
    <binding name="primaryBinding" openTimeout="00:01:00"  closeTimeout="00:01:00" 
              sendTimeout="00:30:00" receiveTimeout="00:30:00">
      <binaryMessageEncoding compressionFormat="GZip">
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                      maxArrayLength="2147483647" maxBytesPerRead="2147483647"
                      maxNameTableCharCount="2147483647" />
      </binaryMessageEncoding>
      <httpsTransport transferMode="Streamed" maxReceivedMessageSize="6000000" 
                      maxBufferSize="6000000" maxBufferPoolSize="12000000" />          
    </binding>