2014-11-04 57 views
3

創建性能計數器,我試圖這樣的:「類別不存在」。爲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()); 

從此帖一: Is there a way to check how many messages are in a MSMQ Queue?

有同樣的錯誤提及,但沒有解決使用的PerformanceCounter時。

我還發現在這裏提到: Performance Counter - System.InvalidOperationException: Category does not exist

然而,這個線程就這樣開始了確切的話題,但在回答最初的問題上如何處理錯誤之前去了另一個方向。基本上我不需要知道每秒的記錄,我只需要知道隊列何時開始備份。

是什麼導致了這個錯誤?我試過指向私有隊列和公共隊列,並指向隊列中有消息。

編輯: 我已經在perfmon中添加了計數器,以確保我的服務器路徑和隊列名稱正確。

+0

我在本地安裝MSMQ,並且似乎越來越近了原來的錯誤點。我可以新增PerformanceCounter()。不幸的是,我剛剛畢業於相同問題的新版本:當我嘗試讀取計數時,實例'private $ \ '在指定的類別中不存在。 – Roger 2014-11-05 16:14:17

回答

1

好吧......算了一下。隊列名稱本身不包含它們運行的​​machineName的全限定名稱。我通過使用PerformanceCounterCategory.GetInstanceNames()發現了這一點。這給你正確的隊列名稱。該修補程序是使用PerformanceCounter的最後一個構造函數來新建的,該構造函數允許您指定機器名稱。我指定的隊列名稱是計算機名稱,但計算機名稱是完全合格的:

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