【发布时间】:2012-10-12 16:02:10
【问题描述】:
我有一个使用 MSMQ 的应用程序,当生产者和消费者都打开时,它运行良好 同一台机器。
昨天,我第一次尝试创建另一个可以在单独的机器上运行的生产者。这 queue 是私有队列,之前双方都将其引用为
string strQueueName = ".\Private$\MyQueue";
我尝试了几种方法从远程机器引用这个队列。我的服务器名称是“groucho”, 所以我尝试了
string strQueueName = "groucho\Private$\MyQueue";
但这始终引发“无效的队列路径名”异常。
一位开发人员建议我尝试以下方法,以避免异常:
string strQueueName = "FORMATNAME:DIRECT =OS:grouch\\private$\\SDVQueue";
这不再引发异常,但它似乎也不起作用,因为我没有 查看队列中的消息。
服务器是 Windows Server 2008 R2。队列已设置(我刚刚注意到),以便 “每个人”都可以接收和窥视,但不能发送,但是当我尝试添加“发送”时,我得到 显示“无法设置安全描述符,错误:访问被拒绝”的错误对话框。 我确实拥有此框的管理员权限。
通过阅读其他帖子,我知道有各种安全措施在起作用, 但我在发件人或主机上的事件日志中都没有看到任何错误。
如果这是一个安全问题,我如何查看问题所在?
谢谢!
这是完整的测试代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Messaging;
namespace RemoteQueue
{
class Program
{
static void Main(string[] args)
{
string name = "FORMATNAME:DIRECT =OS:groucho\\private$\\SDVQueue";;
string input = null;
MessageQueue queue = null;
try
{
queue = new MessageQueue(name);
string key = "key";
for (int i = 0; i < 200; i++)
{
Message msgToSend = new Message();
string value = "value_" + i;
msgToSend.Body = string.Format("{0},{1}", key, value);
Console.WriteLine("Sending message " + i);
queue.Send(msgToSend, "otherpart");
}
}
catch (MessageQueueException me)
{
Console.WriteLine("ERROR: caught message queue exception: " + me.Message);
}
Console.WriteLine("Type any key to exit...");
input = Console.ReadLine();
}
}
}
【问题讨论】:
-
邮件是否在死信队列中?
-
我刚查了一下,死信队列里什么都没有。