我创建了一个通过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跨度。
答案 0 :(得分: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()调用: