队列不存在或您没有足够的权限来执行该操作。通过 MSMQ 发送消息时出现异常
Posted
技术标签:
【中文标题】队列不存在或您没有足够的权限来执行该操作。通过 MSMQ 发送消息时出现异常【英文标题】:The queue does not exist or you do not have sufficient permissions to perform the operation. exception while sending message via MSMQ 【发布时间】:2015-05-27 08:22:53 【问题描述】:我创建了一个函数来通过 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 跨度。
【问题讨论】:
您的 Windows 用户帐户配置文件似乎有问题。您是否尝试创建另一个用户帐户,然后手动创建队列?发生什么了?如果您卸载 MSMQ,重新启动并重新安装它会怎样? @Ahmedilyas:我在两台不同的机器上试过这段代码。 MSMQ 之前没有安装,我安装了它并重新启动了系统。在两台机器上仍然遇到同样的问题。 @Ahmedilyas:刚刚尝试手动创建消息队列,它允许我创建。 @Ahmedilyas:是安装问题吗?我是否还必须在我的系统中安装 AD 才能使用 MSMQ? @Ahmedilyas:好的,我不确定我在两台机器上的安装做错了什么。你能告诉我安装MSMQ的正确方法吗?我正在使用 Windows 7 专业版 【参考方案1】: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() 调用:
【讨论】:
感谢您指出这个愚蠢的错误。我什至没有创建队列。你之前在哪里,正在等待赏金 ;-) :P :D 现在正在创建队列,非常感谢。 但现在它卡在 m = queue.Receive();不知道为什么 好了,问题解决了,恭喜。现在您需要让它与另一个程序通信,直到队列中出现一条消息,Receive() 才会完成。通过您想与之交谈的任何程序放在那里。 消息已保存在队列中。我刚刚检查了消息中创建的 Xml。在第一个 m.Receive() 之后,消息从队列中消失。你能告诉我一些学习MSMQ的好文章吗? 用谷歌找文章,我做这个太久了,不知道什么是“好”了。样板建议是使用 WCF 代替 btw。以上是关于队列不存在或您没有足够的权限来执行该操作。通过 MSMQ 发送消息时出现异常的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 禁用所有触发器 - 找不到对象“XXXX”,因为它不存在或您没有权限
无法绑定到 8080 端口。它可能被另一个应用程序占用或您没有足够的权限