【问题标题】:Sending 4GB list of objects in WCF在 WCF 中发送 4GB 对象列表
【发布时间】:2015-03-11 03:33:20
【问题描述】:

我有一个服务器,其中包含一些对象的列表。 列表大小介于 3GB - 4GB 之间,这使得使用最大消息大小 2147483647 (2.14 GB) 是不可能的。

有办法在一次传输中发送这种大小的列表吗?

或者也许有一种方法可以将列表分成小部分并将它们发送到多线程?

任何想法都会很棒!

【问题讨论】:

  • 有点可疑。为什么要在内存中保存一个 3GB - 4GB 的列表?
  • 是的,将它们分批到多个调用中,但是要向下发送服务会产生大量数据,使用 ETL 可能会更简单。对于批处理,这篇文章将是一个好的开始:make-awesome.com/2010/08/…
  • 我认为您应该阅读有关流媒体的内容。但是,有很多事情需要考虑。如果 WCF 托管在 IIS 上,您还需要为 IIS 添加配置以允许如此大的请求。您还可以查看 WCF 会话并在多个请求中发送所有数据,但在同一个会话中。我会开始阅读:大型请求的 IIS 配置、WCF 和 ASP.NET 流、WCF 会话,然后为特定场景选择正确的组合。
  • @Sriram Sakthivel 数据在数据库中,我在服务器端导入,需要发送到客户端。
  • @OrCohen 您要解决的真正问题是什么?您是否尝试向客户端发送报告或 Excel 文件?您是否要在网格中显示 4GB 的数据?您是否要在某处导出数据?到目前为止,您已经描述了您认为是解决方案的问题。

标签: c# wcf silverlight


【解决方案1】:

是的,可以将它们分批处理到多个调用中,但是要向下发送服务会产生大量数据,使用 ETL 可能是一个更简单的选项。

对于批处理,这篇文章将是一个好的开始:http://www.make-awesome.com/2010/08/batch-or-partition-a-collection-with-linq/ 如果您创建批处理数量的查询,那么您可以将它们并行拉下来。

如果您在本地 LAN 上,那么网络饱和可能无法为您提供您期望的并行拉下批次的性能。查看 Google 的 protobuf 或其他方式来实现压缩以获得性能。

【讨论】:

  • 更好 - 使用 HTTP 或 FTP 下载整个 blob,使用协议的本机流和重新启动支持。 ETL 可以生成 blob(报告、文件或任何内容)。
  • HTTP 和 FTP 各有优缺点。它们可以很好地处理大文件,但支持重试可能需要重新发送整个有效负载或实现恢复逻辑。他们还对在另一端重建数据提供了有限的开箱即用支持。与 WCF 相比,它们提供地址和绑定,但不提供合约。
  • 我喜欢批处理方式,仍然尝试找到一种快速的方式将所有部件发送给客户端。也许有更好的方法然后发送部件等到客户端处理后再要求更多.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 2011-08-07
  • 1970-01-01
相关资源
最近更新 更多