在WCF中设置最大下载速度

时间:2011-05-26 05:34:13

标签: c# wcf

我正在使用WCF从数据库下载音频数据。我需要设置最大下载速度。

如何在WCF中完成?

谢谢!

3 个答案:

答案 0 :(得分:21)

WCF通过ServiceThrottlingBehavior类处理限制。

How to throttle a Wcf service

  

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客户端行为。