.net - WCF内部队列监控(为了避免向服务发送太多请求)

标签 .net wcf .net-4.0 wcf-4

我读到 WCF 服务限制无需任何额外代码即可在内部对请求进行排队。
是否可以监控这些内部队列以了解例如的填充水平?

我的目标是避免客户端可以向服务发送许多请求(例如,通过缓慢或拥塞的服务),因此如果可以监控尚未发送的传出请求的数量,客户端可能会减少流量。

最佳答案

您正在寻找的是一种节流算法。一种常见的此类算法是测量最近 N 次操作的平均延迟。如果延迟超过异常水平,请开始节流,因为显然服务已经饱和。

你可以这样做:

while (true) {
 var avgLatencyInSec = GetLatencyAverage();
 var thresholdLatency = 0.1; //100ms default latency
 var latencyDiff = Math.Max(0, avgLatencyInSec - thresholdLatency);
 Thread.Sleep((latencyDiff / thresholdLatency) * (latencyDiff / thresholdLatency));
 //you need to tune the sleep amount by a constant factor
}

您的延迟超过阈值越多,节流就会越多。节流呈二次方上升,因此可以保证收敛。

关于.net - WCF内部队列监控(为了避免向服务发送太多请求),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11245754/

相关文章:

wcf - 使用 WCF WebApi 实现工作单元

c# - 锁定在Framework 3.5与4.0之间?

.net - 如何在您自己的 C++ 项目中包含外部库?

c# - 将代理 PAC 与 EWS API 结合使用

c# - .Net Controls DataSource 属性上的缺失行为

c# - 我应该避免几个 bool 参数吗?

c# - System.Windows.Forms.TextBox 中的水印

WCF DataContractSerializer

c# - 排序字典和列表 <>() 在 VS 2010 中有错误

c# - 创建类型并在运行时初始化它