0

我创建了几个测试应用程序来测试 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;            
    }
}
4

1 回答 1

0

我在这里找到了答案: MSMQ ReceiveCompleted not fire?

本质上,控制台应用程序在事件有机会触发之前就结束了。

我放了一个 Console.ReadKey(); 在 Main 函数结束时,一切都很好。

于 2015-05-25T01:17:26.887 回答