【问题标题】:PeekCompleted not firing when messages are received in the queue当队列中收到消息时,PeekCompleted 不会触发
【发布时间】:2015-08-06 08:24:53
【问题描述】:

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

【问题讨论】:

    标签: msmq system.messaging


    【解决方案1】:

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

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

    我放了一个 Console.ReadKey();在 Main 函数的末尾,一切都很好。

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 2014-07-15
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 2011-05-14
      相关资源
      最近更新 更多