我有一个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();
}
非常感谢有关丢失消息和未出现在管理控制台中的消息的帮助
摩西
答案 0 :(得分:2)
好吧,好像我已经解决了。
管理控制台中未显示的消息问题对我来说似乎很奇怪。如果它不存在,我正在从我的代码创建队列(就像在那里的所有样本一样)。事实证明,如果我将队列标签设置为某种东西 - 我可以在管理控制台中看到它的消息。否则 - 我不能。我没有寻找解释,从表面上看事情并没有任何关联,这对我来说似乎是个错误。
缺少消息 - 最常见的问题不在队列中,而在于我如何处理读取消息。我是从AJAX计时器回发中检索它们并添加到会话状态变量。我发现的问题是这个计时器回调有时会出现在原始会话中,有时候 - 不是。所以我没有看到我的一些信息被打印出来。