我正在使用WCF从数据库下载音频数据。我需要设置最大下载速度。
如何在WCF中完成?
谢谢!
答案 0 :(得分:21)
WCF通过ServiceThrottlingBehavior类处理限制。
WCF提供限制行为 管理服务器负载和资源 消费(以下 属性):
MaxConcurrentCalls。限制可以的并发请求数 由所有服务实例处理。 默认值为16。
MaxConcurrentInstances。限制可以的服务实例数 在给定时间分配。对于 PerCall服务,此设置匹配 并发呼叫数。对于 PerSession服务,此设置 匹配活动会话的数量 实例。这个设置无关紧要 对于单一实例模式,因为 只创建了一个实例。该 此设置的默认值为 2147483647。
MaxConcurrentSessions。限制允许的活动会话数 服务。这包括申请 会话,传输会话(用于TCP 和命名管道,例如), 可靠的会话,安全 会话。默认值为10.
我认为没有内置机制来控制带宽。您需要实现自定义流。您使用线程来编写流。然后,您可以控制每秒写入的数据量。例如,您可以写入250Kb,然后执行线程休眠一秒钟。
另请参阅:Concurrency and Throttling Configurations for WCF Services
答案 1 :(得分:7)
好的,周五晚上疯狂的射门: 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模块/处理程序 - 理论上你可以使用它来触发基于URL的IIS限制(如媒体服务器服务的URL)
从未尝试过这个 - 在我周末回家之前总WAG。祝你好运!
答案 2 :(得分:3)
我建议你在这里看看这个简单的项目:Simulating Latency and Bandwidth Restrictions in WCF。它引入了一种能够增加网络延迟的WCF客户端行为。