4

我创建了一个函数来通过 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 跨度。 在此处输入图像描述

4

1 回答 1

5
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() 调用:

在此处输入图像描述

于 2015-03-26T12:30:22.383 回答