2014-11-04 5 views
3

에 대한 생성 성능 카운터 나는 이것을 시도하고있다 : PerformanceCounter를 사용하는 경우 이 Is there a way to check how many messages are in a MSMQ Queue?"범주가 없습니다." MSMQ 대기열

가이 같은 오류의 언급은 없지만, 더 해상도 :이 게시물에서 온

using System.Diagnostics; 

// ... 
var queueCounter = new PerformanceCounter(
    "MSMQ Queue", 
    "Messages in Queue", 
    @"machinename\private$\testqueue2"); 

Console.WriteLine("Queue contains {0} messages", 
    queueCounter.NextValue().ToString()); 

.

는 또한 여기에 언급 발견 Performance Counter - System.InvalidOperationException: Category does not exist

그러나,이 thread가이 정확한 주제에 시작했지만 오류에 대해 무엇을해야하는지에 초기 질문에 대답하기 전에 다른 방향으로 갔다. 기본적으로 초당 레코드를 알 필요는 없으며 큐가 백업되기 시작하면 알 필요가 있습니다.

이 오류의 원인은 무엇입니까? 개인 및 공용 대기열을 가리키며 메시지를 포함하는 대기열을 가리키고 있습니다.

편집 : perfmon에 카운터를 추가하여 서버 경로와 큐 이름이 올바른지 확인했습니다.

+0

로컬에 MSMQ가 설치되어 있으며 원래 오류 지점을 벗어나는 것처럼 보입니다. PerformanceCounter()를 새로 시작할 수 있습니다. 불행히도 나는 같은 문제의 새 버전으로 졸업했다 : 인스턴스 'private $ \ '은 수를 읽으려고 할 때 지정된 카테고리에 존재하지 않는다. – Roger

답변

1

좋아 ... 알아 냈어. 대기열 이름에는 실행중인 machineName의 완전한 이름이 포함되지 않았습니다. 나는 PerformanceCounterCategory.GetInstanceNames()를 사용하여 이것을 발견했다. 이렇게하면 정확한 대기열 이름이 부여됩니다. 이 수정 프로그램은 시스템 이름을 지정할 수있는 PerformanceCounter의 마지막 생성자를 사용하여 새롭게 수정되었습니다. 지정한 큐 이름은 컴퓨터 이름이지만 컴퓨터 이름은 정규화 된 이름입니다.

new PerformanceCounter("MSMQ Queue", "Messages in Queue", @"<machine name>\private$\dispatch", @"<fully qualified machine name>"))