我创建了几个测试应用程序来测试 MSMQ。在我做任何实际工作之前,我想在几个控制台应用程序中测试使用 MSMQ。
MSMQ 以工作组模式安装在本地服务器上。我的桌面服务器上也安装了 MSMQ。我正在尝试从远程专用队列发送和接收消息。
我能够很好地向 MSMQ 发送消息。我可以在队列中看到他们。但是,当我尝试将它们读出时,PeekCompleted 事件永远不会触发。我编写了另一个调用 Receive 的同步版本的应用程序,我可以检索消息。出于某种原因,BeginPeek 和 PeekCompleted 对我不起作用。
我不能在工作组安装中使用 BeginPeek 吗?如果我可以在工作组安装中使用 BeginPeek,有人知道出了什么问题吗?
class Program
{
static void Main(string[] args)
{
try
{
MessageQueue mq = new MessageQueue("FormatName:Direct=TCP:10.1.1.102\\private$\\EmailQueue");
mq.Formatter = new XmlMessageFormatter(new Type[] { typeof(Email) });
mq.PeekCompleted += new PeekCompletedEventHandler(ProcessMessage);
Console.WriteLine("Begin listening on queue...");
mq.BeginPeek();
return;
}catch(Exception e){
Console.WriteLine(e.ToString());
}
}
private static void ProcessMessage(Object source, PeekCompletedEventArgs asyncResult)
{
Console.WriteLine("Recieveing message...");
MessageQueue mq = (MessageQueue)source;
mq.EndPeek(asyncResult.AsyncResult);
Message m = mq.Receive();
Email e =(Email) m.Body;
Console.WriteLine("Email Message:");
Console.WriteLine(e);
mq.BeginPeek();
return;
}
}