有没有办法检查公共(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/

10-13 07:45