"类别不存在。"为MSMQ队列创建性能计数器

时间:2014-11-04 21:16:40

标签: msmq performancecounter

我正在尝试这个:

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中添加了计数器,以确保我的服务器路径和队列名称正确。

1 个答案:

答案 0 :(得分:2)

好的......明白了。队列名称本身不包含它们运行的​​machineName的完全限定名称。我通过使用PerformanceCounterCategory.GetInstanceNames()发现了这一点。这为您提供了正确的队列名称。修复程序是使用PerformanceCounter的最后一个构造函数来启动,它允许您指定机器名称。我指定的队列名称是机器名称,但机器名称是完全限定的:

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