队列不存在或您没有足够的权限来执行该操作。通过 MSMQ 发送消息时出现异常

The queue does not exist or you do not have sufficient permissions to perform the operation. exception while sending message via MSMQ

我创建了一个通过 MSMQ 发送消息的函数,但在执行时出现异常。 下面是我的功能。

public void SendMessageToQueue(ChessQueue chessQueue)
{
    MessageQueue queue = null;
    Message m = null;
    if (!MessageQueue.Exists(".\Private$\" + chessQueue.QueueName))
    {
        queue = new MessageQueue(".\Private$\chessqueue");
        chessQueue.Messages = new List<MessageObject>();
        chessQueue.Messages.Add(chessQueue.Message);
        queue.Formatter = new BinaryMessageFormatter();
        m = new Message();
        m.Body = chessQueue;
    }
    else
    {
        queue = new MessageQueue(".\Private$\" + chessQueue.QueueName);
        queue.Formatter = new BinaryMessageFormatter();
        m = queue.Receive();
        ChessQueue ExistingChessQueue = m.Body as ChessQueue;
        ExistingChessQueue.Messages.Add(chessQueue.Message);
        m.Body = ExistingChessQueue;
    }            
    queue.Send(m);
    // Getting Exception at this Line
}

异常:- 队列不存在或您没有足够的权限执行该操作。

此外,我无法在计算机管理下打开消息队列的安全选项卡。 请参阅随附的屏幕截图。

我尝试在私有下手动创建消息队列,系统允许我这样做。见下文

下面是mmc span in.

if (!MessageQueue.Exists(".\Private$\" + chessQueue.QueueName))
{
    queue = new MessageQueue(".\Private$\chessqueue");
    // etc..

这段代码中有两个错误。第一个问题是它在字符串中硬编码队列名称而不是使用 chessQueue.QueueName。不匹配当然是致命的。第二个问题,当然也是最关键的一个,是它实际上并没有创建队列。正确的代码应该类似于:

string name = ".\Private$\" + chessQueue.QueueName;
if (!MessageQueue.Exists(name))
{
    queue = MessageQueue.Create(name);
    // etc...

在我 运行 这段代码之后看起来像这样,有一个 queue.Send() 调用: