有没有办法检查公共(public) MSMQ 是否为空?对于私有(private) MSMQ,这很容易:
private bool IsQueueEmpty(string path)
{
bool isQueueEmpty = false;
var myQueue = new MessageQueue(path);
try
{
myQueue.Peek(new TimeSpan(0));
isQueueEmpty = false;
}
catch (MessageQueueException e)
{
if (e.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout)
{
isQueueEmpty = true;
}
}
return isQueueEmpty;
}
我将如何对公共(public) MSMQ 进行相同的检查?如果我尝试使用上面的代码检查公共(public) MSMQ,它会在 Peak 上给我一个错误:
System.ArgumentOutOfRangeException:长度不能小于零。
最佳答案
当您使用直接格式名称访问队列时,Peek
方法仅在远程计算机上可用。您应该能够使用相同的代码,只要您不依赖目录服务来进入队列。
直接队列名称通常类似于:DIRECT=URLAddressSpecification/QueueName
关于c# - 如何检查公共(public) MSMQ 是否为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3686312/