WCF服务如何返回大量数据?

时间:2009-02-26 21:23:06

标签: asp.net wcf

我正在开发一个将数据传递到自定义客户端应用的网络应用。

当数据超过某种“小”尺寸时,我会遇到异常。由于最终用户可能会使用越来越大的数据大小,因此我将WCF函数的返回值切换为数据集的ID。

接下来,我将客户端转换为使用ID从一些简单的ASPX页面检索数据。这很好,但意味着界面不一致。

  1. 编辑:我不确定我是如何错过返回Stream的,但是我确实错过了。有没有人遇到过WCF上的Streams问题?

  2. 除连接断开外,从ASPX页面通过HTTP流读取文件有什么问题吗?

  3. 我认为我缺少WCF的功能(如oob数据)。但是,C#/ .NET在线帮助要么非常差,要么严重破坏,就像我的机器上安装的一样。

    感谢。

    [编辑] 顺便说一下,在我的情况下,“大量数据”是用户输入驱动的,但需要至少20MiB。

5 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

你看到的例外情况是什么?您是否可以阅读XML,因为超出了读者配额?

如果是这样,我想我知道可以解决的问题。请参阅下面的示例wsHttpBinding。您的异常应该可以帮助您确定需要修复哪个参数。您可以为读者提供maxReceivedMessageSize和配额。如果这不起作用,请告诉我,请提供更多数据。

<wsHttpBinding>
    <binding name="bindingName" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" maxBufferPoolSize="524288" maxReceivedMessageSize="65536">
      <readerQuotas maxDepth="32" maxStringContentLength="3145728" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
    </binding>
</wsHttpBinding>

答案 2 :(得分:0)

你可以去http://weblogs.asp.net/cibrax/archive/2008/06/10/streaming-large-content-with-wcf-and-deferred-execution.aspx这个地址,我不适合你的pb,但这也是一个想法。

答案 3 :(得分:0)

据我了解@Eugene提到的Large Data and Streaming文章, 必须切换所有通信的传输模式,这意味着它会关闭一些完整性检查。

因此,我最终使用了半自定义HTTP客户端类,其中:

  • 下载使用ASPX页面返回数据并将其流式传输到 客户端应用程序的磁盘文件,
  • 上传将文件发送到生成GUID并保存的ASPX页面 将该GUID作为其名称的一部分的文件到服务器的磁盘。然后呢 调用WCF方法以GUID代替传递其他参数 文件数据。

它不漂亮但它有效。不幸的是,IIS或客户端应用程序崩溃可能 将临时文件保留在服务器硬盘上,但它们是本地化的,可能是 清理服务创建。

答案 4 :(得分:0)

在客户端和服务器端设置maxItemsInObjectGraph对我有用。

(不要忘记客户端。) http://social.msdn.microsoft.com/Forums/en/wcf/thread/0af69654-2d89-44f3-857a-583b57844ca5