在使用流之前,WCF传输多少个字节?

3
我有一个客户端应用程序,它与更新服务通信以下载文件。更新服务从数据库获取文件,然后使用WCF将它们发送给客户端。目前,我正在使用WSHttpBinding,以便我可以利用安全性。因此,我已经成功地下载/发送了大约8 MB的最大文件。最近,我尝试使用大约130 MB的文件,但客户端没有任何反应;网络使用率仅保持在0%。
我认为文件太大了,无法在不使用流式传输的情况下传输(maxReceivedMessageSize等设置为209715200,因此我知道设置正确)。为了解决这个问题,我想让服务使用BasicHttpBinding,这样如果文件超过一定大小,我就可以使用流式传输。
我的问题是,在什么大小的文件上,我应该从WSHttpBinding切换到BasicHttpBinding和流式传输?是否有某种标准可以遵循?或者我的逻辑完全错误?
2个回答

2

这没有硬性规则或公式可以计算 - 通常情况下,它取决于您的实际情况。

考虑以下内容:

  • 您的服务通常可以同时为多个调用者提供服务(根据您的限制设置)- 现在假设有10或20个并发调用者。

  • 如果每个调用者都想下载一个文件,如果您不使用流式传输,则整个文件需要缓存在您的WCF服务的内存中。

因此,如果20个调用者同时尝试下载100 MB的文件,您的服务器端机器一次必须能够使用2 GB的RAM。除了运行所有其他常规进程以外,您的服务器是否能够处理它?

通过这个简单的计算,您可能可以合理地猜测在何种情况下切换到流式传输是有意义的,从而得出大小限制。


1
好的,但由于服务每次都从我的SQL数据库获取文件,即使使用流式传输,每个调用者仍然需要将完整的100MB文件保存在内存中(20个调用者=仍然需要2GB的RAM)?我是否可以将WCF服务仅用作从数据库到客户端的“桥梁”,而不实际需要它将完整文件保存在内存中?或者我是否可以以某种方式只在内存中保留一份副本,并将其保留在那里,直到所有调用者完成接收为止? - Marcus

1
正如marc_s所说,这取决于您的网站活动和可用内存。
作为个人规则,我通常会在平均大小达到约1Mb时开始考虑流式传输。5Mb是我的“必须流式传输”限制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接