我有一个客户端应用程序,它与更新程序服务通信以下载文件。更新程序服务从数据库中获取它们,然后使用 WCF 将它们发送到客户端。目前,我正在使用 WSHttpBinding,因此我可以利用安全性。所以我一直在下载/发送的最大文件大约是 8 MB,这工作正常。我最近尝试了一个大约 130 MB 的文件,但客户端没有任何反应;网络使用率刚好为 0%。
我假设文件太大而无法在没有流式传输的情况下传输(maxReceivedMessageSize 等等于 209715200,所以我知道设置适合它)。为了解决这个问题,我想让该服务使用 BasicHttpBinding,这样我就可以在文件大于特定大小时流式传输文件。
我的问题是,在什么大小的文件下我应该从 WSHttpBinding 切换到 BasicHttpBinding 和流?是否应该遵循某种标准?还是我的逻辑在这里完全错误?
最佳答案
没有硬性规则或公式来计算这个 - 按照惯例,这取决于您的情况。
考虑一下:
您的服务通常可以同时为多个调用者提供服务(取决于您的节流设置)- 假设现在同时有 10 或 20 个调用者
如果这些调用者中的每一个都想下载一个文件,如果您不使用流式传输,则整个文件需要缓冲在您的 WCF 服务的内存中
因此,如果 20 个调用者同时尝试下载一个 100 MB 的文件,您的服务器端计算机必须能够同时使用 2 GB 的 RAM。除了所有其他正在运行的常规进程之外,您的服务器能否处理这些问题?
通过这个简单的计算,您可能可以合理地猜测大小限制在您的情况下切换到流式传输是有意义的。
关于c# - 在我应该使用流之前在 WCF 中传输了多少字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4599517/