MSMQ Сообщения не приходят - PullRequest
2 голосов
/ 31 октября 2010

У меня есть веб-приложение и служба, расположенные на одной машине и взаимодействующие через очереди сообщений.Проблема, с которой я сталкиваюсь, заключается в том, что примерно половину времени сообщения, которые я отправляю из службы, не поступают в код чтения в веб-приложении.Некоторые из них прибудут, а некоторые нет.Сообщения отправляются между ними с задержкой не менее 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 Ответ

2 голосов
/ 01 ноября 2010

Ну, кажется, я решил это.

  1. Проблема с сообщениями, не замеченными в консоли управления, кажется мне действительно странной. Я создавал очередь из своего кода, если она не существовала (как во всех примерах). Оказалось, что если я установлю метку очереди на что-то - я смогу увидеть ее сообщения в консолях управления. В противном случае - я не могу. Я не искал объяснения, на первый взгляд, вещи никак не связаны, и мне это кажется ошибкой.

  2. Отсутствующие сообщения - скорее всего, проблема была не в очереди, а в том, как я обработал прочитанные сообщения. Я извлекал их из обратной передачи таймера AJAX и добавлял в переменную состояния сеанса. Проблема, которую я обнаружил, состояла в том, что этот обратный вызов таймера иногда приходил в исходный сеанс, а иногда - нет. Таким образом, я не видел, чтобы некоторые из моих сообщений были напечатаны.

...