我讀了WCF服務調節內部排隊請求,沒有任何額外的代碼。 是否有可能監視這些內部隊列以瞭解例如填充級別?WCF內部隊列監控(爲了避免發送太多的請求到服務)
我的目標是避免客戶端可以向服務發送很多請求(例如,通過緩慢或擁塞的服務),因此如果可以監視尚未發送的傳出請求的數量,則客戶端可能會減少流量。
我讀了WCF服務調節內部排隊請求,沒有任何額外的代碼。 是否有可能監視這些內部隊列以瞭解例如填充級別?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
}
越多,你的等待時間超過閾值時,更多的限制將踢,因此保證收斂節流平方上升。
它看起來不像這是可能的 - http://social.msdn.microsoft.com/Forums/en/wcf/thread/e5335f94-bf9a-4f88-8d19-0cc8b09fab2c –
我剛剛閱讀你提供的鏈接... 謝謝!不過,爲了解釋我的目標,我在問題中增加了一些細節。 – enzom83