2012-06-28 7 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

예, 사용해보십시오. 이 알고리즘은 약간의 튜닝이 필요합니다. 스로틀 링의 2 차 증가는 완벽하게 올바르게 할 필요가 없음을 확인합니다. 어느 정도 자기 조절할 것입니다. – usr