从C#使用MSMQManagement的最佳方法是什么?当远程计算机断开连接时,我需要能够查看和清除本地传出队列.
显然,一些用户可以通过COM API执行此操作,但在COM参考选项卡中,我没有其他网站/博客/帖子提到的"Microsoft Message Queue 3.0对象库"(也没有任何类似的东西).我在机器上搜索了Interop.MSMQ.dll,也找不到它.
我们正在使用VS 2008并在Windows 7 64位上运行.
我错过了什么?是否有其他机制通过"普通"托管类来实现这一目标?
谢谢
我现在这样做:
MessageQueue queue = new MessageQueue(".\Private$\myqueue");
MessageEnumerator messageEnumerator = queue.GetMessageEnumerator2();
int i = 0;
while (messageEnumerator.MoveNext())
{
i++;
}
return i;
Run Code Online (Sandbox Code Playgroud)
但是由于显而易见的原因,它只是感觉不对 - 我不应该遍历每一条消息只是为了得到一个数,我应该吗?
有没有更好的办法?
作为自动启动/停止某些NServiceBus服务的努力的一部分,我想知道服务何时完成处理其输入队列中的所有消息.
问题是,当NServiceBus服务正在运行时,我的C#代码报告的消息少于实际消息.所以当剩下一条消息时,它认为队列是空的.如果服务停止,它将报告"正确"的消息数.这很令人困惑,因为当我使用"计算机管理"应用程序中的"专用队列"视图自行检查队列时,它会显示"正确"的数字.
我正在使用以下C#代码的变体来查找消息计数:
var queue = new MessageQueue(path);
return queue.GetAllMessages().Length;
Run Code Online (Sandbox Code Playgroud)
我知道当有很多消息时,这会表现得非常糟糕.我正在检查的队列一次只能有一些消息.
任何见解或建议将不胜感激!
更新:我应该提到此服务是在分发服务器后面,在尝试关闭此服务之前,该服务器已关闭.所以我有信心不会将新消息添加到服务的输入队列中.