【问题标题】:WCF returning "dynamic" gzipstreamWCF 返回“动态”gzipstream
【发布时间】:2012-10-10 09:53:31
【问题描述】:

我需要创建一个服务,该服务返回由一个或多个文件组成的 GZipStream。文件数量可能有数百个,每个文件可能占用超过 500MB。

是否可以在传输流时以某种方式将文件动态添加到 gzipstream 中? (避免在需要将文件复制到流中时遇到内存不足异常)

等等:

  1. 将 fileA 复制到正在返回的流中。
  2. 客户端开始读取流。
  3. 读取 fileA 后(客户端),将 fileB 复制到流(服务器端)。
  4. 客户端继续读取流。

...以此类推,直到没有更多文件为止。

顺便说一句。压缩文件并不重要,只需将它们组合成一个 zip 文件,这样客户端只需下载一个文件即可。

所以我的目标是:将多个文件作为单个文件流式传输回客户端,而无需在服务器上一次处理所有文件(以避免将所有文件加载到内存中,从而引发内存不足异常)。

这可以通过以某种方式创建自定义流来完成,还是有更简单的方法?

谢谢。

【问题讨论】:

    标签: wcf stream


    【解决方案1】:

    您可以将文件合并为磁盘上的单个 zip 文件,然后将该文件流式传输回来。

    有关如何将文件合并为 zip 文件,请参阅:c# sharpziplib adding file to existing archive

    这解决了内存不足的问题,但这确实意味着您需要大量的磁盘空间。

    【讨论】:

    • 在磁盘上临时创建 zip 似乎是可行的方法......谢谢。
    猜你喜欢
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多