2010-10-31 59 views
2

我有一個Web App和一個服務位於同一臺機器上,並通過消息隊列進行通信。我遇到的問題是,大約一半的時間,我從服務發送的消息沒有到達Web應用程序中的閱讀代碼。其中一些會到達,有些則不會。這些消息在它們之間至少有1秒的延遲發送。MSMQ郵件未到達

爲了讓事情變得更難 - 我在管理控制檯中看不到任何我的消息,甚至是那些確實到達的消息。我打開日記,但沒有看到任何區別。我可以完全訪問隊列。

我是新來的MSMQ,並假設它是一個小小的我想念,但從網上閱讀我無法弄清楚。

讀取代碼如下所示:

public SomeMethod 
{ 
... 
    MessageQueue respQ = Utils.GetResponseQueue(); 
    respQ.Formatter = new XmlMessageFormatter(new Type[] { typeof(String) }); 
    respQ.ReceiveCompleted += new ReceiveCompletedEventHandler(OnReceiveCompleted); 
    respQ.BeginReceive(); 
} 
public void OnReceiveCompleted(Object source, ReceiveCompletedEventArgs asyncResult) 
{ 
    MessageQueue replyQueue = (MessageQueue)source; 
    Message replyMessage = replyQueue.EndReceive(asyncResult.AsyncResult); 

    try 
    { 
      //process the message 
      //... 

    } 
    catch (Exception) 
    { 
    } 

    replyQueue.BeginReceive(); 
} 

上會雙雙失蹤的消息,並在管理控制檯

卡察夫

+0

首先刪除那個邪惡的try/catch語句。 – 2010-10-31 16:19:13

+0

那麼,我做了 - 我切換到隊列上的定期接收。現在我沒有收到任何消息。 – 2010-10-31 18:00:34

回答

2

好沒有出現消息欣賞的幫助,看來我已經解決它。

  1. 在管理控制檯中看不到的消息的問題對我來說似乎很奇怪。如果它不存在,我從我的代碼創建隊列(就像所有樣本中那樣)。事實證明,如果我將隊列標籤設置爲某種東西 - 我可以在管理控制檯中看到它的消息。否則 - 我不能。我沒有找到解釋,從表面上看,這些東西並沒有什麼關係,這對我來說似乎是一個錯誤。

  2. 丟失的消息 - 最可能的問題是不在隊列中,但在我如何對待讀取消息。我從AJAX定時器回發中檢索它們並添加到會話狀態變量中。我發現的問題是,這個計時器回調有時出現在最初的會話中,有時 - 不是。所以我沒有看到我的一些消息打印。