MSMQ消息未到达

时间:2010-10-31 15:24:47

标签: .net asp.net msmq

我有一个Web应用程序和一个服务,它位于同一台机器上并通过消息队列进行通信。我遇到的问题是,我从服务发送的消息大约有一半时间没有到达Web应用程序中的阅读代码。其中一些将到达,一些不会。消息的发送时间至少延迟1秒。

为了让事情变得更难 - 我在管理控制台中看不到任何消息,即使是那些到达的消息。我开始记录日记,但没有看到任何区别。我可以完全访问队列。

我是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();
}

非常感谢有关丢失消息和未出现在管理控制台中的消息的帮助

摩西

1 个答案:

答案 0 :(得分:2)

好吧,好像我已经解决了。

  1. 管理控制台中未显示的消息问题对我来说似乎很奇怪。如果它不存在,我正在从我的代码创建队列(就像在那里的所有样本一样)。事实证明,如果我将队列标签设置为某种东西 - 我可以在管理控制台中看到它的消息。否则 - 我不能。我没有寻找解释,从表面上看事情并没有任何关联,这对我来说似乎是个错误。

  2. 缺少消息 - 最常见的问题不在队列中,而在于我如何处理读取消息。我是从AJAX计时器回发中检索它们并添加到会话状态变量。我发现的问题是这个计时器回调有时会出现在原始会话中,有时候 - 不是。所以我没有看到我的一些信息被打印出来。