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