2010-09-06 92 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;