【发布时间】:2011-05-26 05:34:12
【问题描述】:
我正在使用 WCF 从数据库下载音频数据。我需要设置最大下载速度。
如何在 WCF 中完成?
谢谢!
【问题讨论】:
我正在使用 WCF 从数据库下载音频数据。我需要设置最大下载速度。
如何在 WCF 中完成?
谢谢!
【问题讨论】:
WCF 通过 ServiceThrottlingBehavior 类处理限制。
WCF 提供了一种限制行为 管理服务器负载和资源 消费(与以下 属性):
MaxConcurrentCalls。限制并发请求的数量 由所有服务实例处理。 默认值为 16。
最大并发实例数。限制服务实例的数量 在给定的时间分配。为了 PerCall 服务,此设置匹配 并发调用的数量。为了 PerSession 服务,这个设置 匹配活动会话的数量 实例。这个设置无所谓 对于单实例模式,因为 只创建了一个实例。这 此设置的默认值为 2,147,483,647。
最大并发会话数。限制允许的活动会话数 服务。这包括应用程序 会话,传输会话(对于 TCP 和命名管道,例如), 可靠的会话和安全的 会议。默认值为 10。
我认为没有控制带宽的内置机制。您需要实现自定义流。您使用线程来写入流。然后,您可以控制每秒写入多少数据。例如,您可以写入 250Kb,然后执行线程休眠一秒钟。
另见:Concurrency and Throttling Configurations for WCF Services
【讨论】:
好的,周五晚些时候在黑暗中疯狂拍摄: Scott Gu 在博客中介绍了 IIS 7 的新比特率限制模块:http://weblogs.asp.net/scottgu/archive/2008/03/18/iis-7-0-bit-rate-throttling-module-released.aspx
它实际上是为媒体文件设计的,但开箱即用,它是由扩展程序触发的。就其本身而言,这可能还不够——您正在从服务提供文件——.svc,并且您可能不想限制所有服务调用。 (如果您不介意全部限制它们,它可能开箱即用 - 只需在 .svc 上设置规则。
更有趣的是,这篇文章是:http://learn.iis.net/page.aspx/149/bit-rate-throttling-extensibility-walkthrough/ 这个人谈论如何自定义节流器。
您可以根据响应内容执行此操作(他有读取媒体文件内部比特率的示例)。
或者,在文章的大约 3/4 处,查找以下标题:“以编程方式设置服务器变量”
他描述了如何构建一个 http 模块/处理程序——理论上你可以使用它来触发 IIS 基于 URL 的限制(如媒体服务器服务的 url)
在我周末回家之前从未尝试过这个 - 总 WAG。祝你好运!
【讨论】:
我建议你在这里看看这个简单的项目:Simulating Latency and Bandwidth Restrictions in WCF。它引入了一种能够增加网络延迟的 WCF 客户端行为。
【讨论】: