【问题标题】:How can a WCF service return large amounts of data?WCF 服务如何返回大量数据?
【发布时间】:2010-10-10 04:49:43
【问题描述】:

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

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

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

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

  2. 除了连接断开之外,通过 HTTP 流从 ASPX 页面读取文件是否存在任何问题?

我认为我缺少 WCF 的功能(如 oob 数据)。但是,C#/.NET 在线帮助要么很差,要么安装在我的机器上严重损坏。

谢谢。

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

【问题讨论】:

    标签: asp.net wcf


    【解决方案1】:

    【讨论】:

    【解决方案2】:

    您看到的异常是什么?超出了读者配额,你不能读 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>
    

    【讨论】:

    • 这是消息大小溢出导致的超时异常(忘记详细信息)。无论如何,将此数据作为字符串(甚至字节 [])返回似乎并不合理,我想弄清楚其他人如何通过 WCF 返回“大”数据值。
    • 谢谢,您的评论可能会解决我认为的核心问题(客户端/服务器上的消息大小不匹配),但我目前还没有解决这个问题。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多