我正在尝试这个:
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 :(得分:2)
好的......明白了。队列名称本身不包含它们运行的machineName的完全限定名称。我通过使用PerformanceCounterCategory.GetInstanceNames()发现了这一点。这为您提供了正确的队列名称。修复程序是使用PerformanceCounter的最后一个构造函数来启动,它允许您指定机器名称。我指定的队列名称是机器名称,但机器名称是完全限定的:
new PerformanceCounter("MSMQ Queue", "Messages in Queue", @"<machine name>\private$\dispatch", @"<fully qualified machine name>"))