Я подключаюсь к удаленному MSMQ в рамках службы Windows и выполняю BeginReceive следующим образом:
msmq.ReceiveCompleted += new ReceiveCompletedEventHandler(Process);
msmq.BeginReceive();
Метод Process получает сообщение и вызывает EndReceive следующим образом:
message = msmq.EndReceive(asyncResult.AsyncResult);
и затем обрабатывает сообщение, затем снова вызывает BeginReceive, как это:
msmq.BeginReceive();
Проблема в том, что по какой-то причине, когда сервер MSMQ перезагружается, метод Process запускается и попадает в строку EndReceive, которая затем генерирует исключение MessageQueueException. После перезагрузки удаленного сервера больше сообщений не принимается и не обрабатывается, пока я не перезапущу службу Windows.
Мне кажется странным, что метод ReceiveCompletedEventHandler (Process) запускается, а также, почему больше сообщений не поступает после перезагрузки удаленного сервера - я не совсем уверен, как обеспечить восстановление соединения после перезагрузки.
Кто-нибудь знает, почему это происходит? (и как это исправить?).
Примечание - Теперь я добавил некоторый код, который обрабатывает случай, когда вызов EndReceive выдает эту конкретную ошибку, и повторяет цикл, вызывая BeginReceive () снова (с Thread.Sleeps), пока не исчезнет ошибка , Досадно, что, несмотря на то, что это работает, когда сервер MSMQ находится в резервном состоянии и кажется, что BeginReceive работает (то есть не выдает никаких ошибок), сообщения по-прежнему НЕ принимаются.