【问题标题】:WCF best practice/configuration for streaming downloads流式下载的 WCF 最佳实践/配置
【发布时间】:2012-03-08 11:48:06
【问题描述】:

我正在创建一个从服务器下载文件的服务,我在这方面的知识有限,并且正在询问有关该服务设置的建议。

考虑到会影响服务器的内存使用情况,我已经排除了完整的文件缓冲。

哪种绑定最适合在 WCF 中用于安全地流式下载? wsHttpBinding、basicHttpBinding、netTcpBinding 等

如果不是太麻烦,你能写几行说明为什么你的答案适合功能吗?(所以我从答案中学习)

谢谢

ry4n

(目前正在开发 Vs2008)

还有什么格式的信息最好返回以供 android 使用?

更新*更多信息: 文件大小:介于 1MB 和 1GB 之间,可同时下载多个。

我应该采用哪些 WCF 配置来实现此功能?

【问题讨论】:

  • 我建议谷歌提供几个很好的链接 - 这是一个候选人:codeproject.com/Articles/166763/…
  • 我认为这些简单的例子没有考虑到这样一个事实,即 IIS 和 WCF 客户端都喜欢在发送/接收之前将整个文件缓冲到内存中。多亏了这一点,我们有自己的复杂的文件下载/上传基础设施来解决这个问题。
  • 下载量有多大?你也可以使用像 windows BITS 这样的下载管理器或像 SharpBITS codeproject.com/Articles/14727/… Windows 更新使用 BITS 这样的包装器。
  • 它们可能非常大 1GB+,我用更多信息更新了上述问题

标签: c# wcf web-services windows-services streaming


【解决方案1】:

非流模式:对于大多数熟悉 WCF 的人来说,NetTcp 和 TransferMode.Streamed 会一起说,但是这样会带来严重的性能问题。流式传输可以让您容纳更多的并发下载,因为它不会占用服务器的内存,但 WCF 具有不可覆盖的流块大小,它会减慢下载速度,超过 100MB 的文件将比任何其他方法慢得多。

我建议实现分块方法方法,例如

byte[] GetBytes(int chunkNumber);

在客户端,您可以在下载时拼接块。使用 HttpBinding 实现互操作性,因为您传输的只是字节,因此不会比 NetTcp 绑定产生太多开销。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 2010-09-11
    相关资源
    最近更新 更多