2015-05-24 36 views
0

我創建了幾個測試應用程序來測試MSMQ。在做任何真正的工作之前,我想在幾個控制檯應用程序中使用MSMQ進行測試。當隊列中收到消息時,PeekCompleted未觸發

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;    
    } 
} 

回答

0

,我發現我的答案在這裏: MSMQ ReceiveCompleted not firing?

從本質上講,控制檯應用程序即將結束前的事件有機會觸發。

我把一個Console.ReadKey();在主要功能的結尾,一切都很好。

相關問題