2012-06-28 20 views
4

我讀了WCF服務調節內部排隊請求,沒有任何額外的代碼。 是否有可能監視這些內部隊列以瞭解例如填充級別?WCF內部隊列監控(爲了避免發送太多的請求到服務)

我的目標是避免客戶端可以向服務發送很多請求(例如,通過緩慢或擁塞的服務),因此如果可以監視尚未發送的傳出請求的數量,則客戶端可能會減少流量。

+1

它看起來不像這是可能的 - http://social.msdn.microsoft.com/Forums/en/wcf/thread/e5335f94-bf9a-4f88-8d19-0cc8b09fab2c –

+0

我剛剛閱讀你提供的鏈接... 謝謝!不過,爲了解釋我的目標,我在問題中增加了一些細節。 – enzom83

回答

1

你在找什麼是節流算法。常用的這種算法是測量最近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 
} 

越多,你的等待時間超過閾值時,更多的限制將踢,因此保證收斂節流平方上升。

+0

爲了計算這個因子,我應該通過嘗試不同的值來執行一些測試(然後選擇似乎是足夠的時間間隔來限制發送請求的因子)? – enzom83

+0

是的,試試吧。這個算法只需要一點點調整。調節的二次增加可以確保你不需要完全正確地使用它。它會自我調節到一定程度。 – usr