我有一个客户端应用程序,它与更新程序服务进行通信以下载文件。 updater服务从数据库获取它们,然后使用WCF将它们发送到客户端。目前,我正在使用WSHttpBinding,所以我可以利用安全性。所以我下载/发送的最大文件大约是8 MB,这很好用。我最近尝试使用大约130 MB的文件,但客户端没有任何事情发生;网络使用率仅为0%。
我认为文件太大而无法传输(maxReceivedMessageSize等等,等于209715200,所以我知道设置是正确的)。要解决这个问题,我想让服务使用BasicHttpBinding,这样我就可以传输文件,如果它大于一定的大小。
我的问题是,我应该在什么尺寸的文件中从WSHttpBinding切换到BasicHttpBinding和流媒体?应该遵循某种标准吗?或者我的逻辑在这里完全错了?
答案 0 :(得分:2)
没有硬性规则或公式来计算这一点 - 按照惯例,取决于适用于您的情况。
考虑一下:
您的服务通常可以同时为多个呼叫者服务(取决于您的限制设置) - 现在假设有10或20个同时呼叫者
如果这些呼叫者都希望下载文件,那么如果您不使用流式传输,则需要将整个文件缓存在WCF服务的内存中
因此,如果20个呼叫者尝试同时下载100 MB文件,则服务器端计算机必须能够同时使用2 GB RAM。您的服务器除了运行其他所有常用进程外还能处理吗?
通过这个简单的计算,您可以合理地估计大小限制是否适用于切换到流式传输的情况。
答案 1 :(得分:1)
正如marc_s所说,这取决于您的网站活动和可用内存。
作为个人规则,我通常会在平均尺寸开始达到1Mb左右时开始考虑流式传输。 5Mb是我的“必须流”限制。