2015-05-24 3 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(); в конце главной функции, и все хорошо.