在我应该使用流媒体之前在WCF中传输了多少字节?

时间:2011-01-04 23:30:06

标签: c# wcf streaming filesize

我有一个客户端应用程序,它与更新程序服务进行通信以下载文件。 updater服务从数据库获取它们,然后使用WCF将它们发送到客户端。目前,我正在使用WSHttpBinding,所以我可以利用安全性。所以我下载/发送的最大文件大约是8 MB,这很好用。我最近尝试使用大约130 MB的文件,但客户端没有任何事情发生;网络使用率仅为0%。

我认为文件太大而无法传输(maxReceivedMessageSize等等,等于209715200,所以我知道设置是正确的)。要解决这个问题,我想让服务使用BasicHttpBinding,这样我就可以传输文件,如果它大于一定的大小。

我的问题是,我应该在什么尺寸的文件中从WSHttpBinding切换到BasicHttpBinding和流媒体?应该遵循某种标准吗?或者我的逻辑在这里完全错了?

2 个答案:

答案 0 :(得分:2)

没有硬性规则或公式来计算这一点 - 按照惯例,取决于适用于您的情况。

考虑一下:

  • 您的服务通常可以同时为多个呼叫者服务(取决于您的限制设置) - 现在假设有10或20个同时呼叫者

  • 如果这些呼叫者都希望下载文件,那么如果您不使用流式传输,则需要将整个文件缓存在WCF服务的内存中

因此,如果20个呼叫者尝试同时下载100 MB文件,则服务器端计算机必须能够同时使用2 GB RAM。您的服务器除了运行其他所有常用进程外还能处理吗?

通过这个简单的计算,您可以合理地估计大小限制是否适用于切换到流式传输的情况。

答案 1 :(得分:1)

正如marc_s所说,这取决于您的网站活动和可用内存。

作为个人规则,我通常会在平均尺寸开始达到1Mb左右时开始考虑流式传输。 5Mb是我的“必须流”限制。