2010-09-06 135 views
0

MSMQ的新功能...我的本地队列永远不会收到我的测试消息。我已验证消息队列和消息队列触发器正在我的服务对话框(Vista Ultimate)中运行。思考?MSMQ专用队列 - 未收到

class ConsoleApplication 
{ 
    private const string Path = @".\private$\SomeQueue"; 

    static void Main(string[] args) 
    { 
     var queue = !MessageQueue.Exists(Path) 
     ? MessageQueue.Create(Path) 
     : new MessageQueue(Path) { Formatter = new BinaryMessageFormatter() }; 

     queue.ReceiveCompleted += queue_ReceiveCompleted; 
     queue.BeginReceive(); 
     queue.Send("test message"); 
     Console.ReadLine(); 
     queue.Close(); 
    } 

    static void queue_ReceiveCompleted(object sender, 
             ReceiveCompletedEventArgs e) 
    { 
     Console.WriteLine("Received message..."); 
     var queue = (MessageQueue)sender; 
     try 
     { 
      var message = queue.EndReceive(e.AsyncResult); 
      Console.WriteLine("Processing message..."); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
     finally 
     { 
      queue.BeginReceive(); 
     } 
    } 
} 

编辑:只是有一个想法,尝试删除并重新创建队列MessageQueue.Delete(路径)。它的工作。我想我的队列不知何故被解决了。

+0

获取对发件人对象队列的新对象引用 var queue =(MessageQueue)sender; 然后对新的BeginReceive()使用相同的对象。巨大的错误。它给堆栈溢出异常,请记住这一点 – Jsinh 2011-10-10 21:28:21

回答

1

我怀疑队列本身是否被破坏。 更可能是创建队列和访问它之间的时间问题。 在专用队列可用之前,MSMQ必须执行各种操作,例如在LQS目录中创建配置文件。

0

您无法同时访问控制台。尝试做一个thread.Sleep()并在你的回调中设置一个布尔值。然后,可以在布尔值设置为读取输出之后执行readline。

while (!received) 
{ 
    System.Threading.Thread.Sleep(1000); 
} 
Console.ReadLine(); 

也许你会想使用断点和的Debug.WriteLine()读取写入到Visual Studio输出窗口输出。

2

尝试终于static void queue_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)事件的块加入

queue.ReceiveCompleted += queue_ReceiveCompleted;