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

Asp.net WCF服务如何返回大量数据?,asp.net,wcf,Asp.net,Wcf,我正在开发一个web应用程序,它将数据传递到自定义客户端应用程序 当数据超过某个“小”大小时,我会遇到异常。由于最终用户可能会使用越来越大的数据量,我将WCF函数的返回值切换为数据集的ID 接下来,我将客户机转换为使用ID从一些简单的ASPX页面检索数据。这很好,但意味着接口不一致 编辑:我不确定我怎么会错过返回流,但我确实错过了。有人对WCF上的流有问题吗 除了断开的连接之外,通过HTTP流从ASPX页面读取文件时是否存在任何问题 我认为我缺少WCF的功能(比如oob数据)。但是,C#/.NE

我正在开发一个web应用程序,它将数据传递到自定义客户端应用程序

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

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

  • 编辑:我不确定我怎么会错过返回流,但我确实错过了。有人对WCF上的流有问题吗

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

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

    谢谢


    [编辑]顺便问一下,在我的例子中,“大量数据”是由用户输入驱动的,但至少需要20mB。

    您看到的异常是什么?由于超出了读卡器配额,您不能读取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>
    

    请参见。

    您可以访问此地址,我认为它不适合您的pb,但这也是一个想法。

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

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

    • 下载使用ASPX页面返回数据并将其流式传输到 客户端应用程序的磁盘文件
    • 上载将文件发送到生成GUID并保存的ASPX页面 将该GUID作为其名称的一部分的文件发送到服务器的磁盘。那么 调用WCF方法以传递其他参数,并使用GUID代替 文件数据
    它不漂亮,但很管用。不幸的是,IIS或客户端应用程序可能会崩溃 将临时文件保留在服务器硬盘上,但它们已本地化,可能会丢失
    创建服务时进行了清理。

    在客户端和服务器端设置maxItemsInObjectGraph对我来说很有用

    (别忘了客户端。)

    消息大小溢出导致超时异常(忘记了详细信息)。无论如何,以字符串(甚至字节[])的形式返回这些数据似乎是不合理的,我想弄清楚其他人是如何通过WCF返回“大”数据值的。谢谢,你的评论可能会解决我认为的核心问题(客户端/服务器上的消息大小不匹配),但我目前没有触及这个问题。谢谢。我昨天也找到了以下链接: