Проверка наличия удаленного MessageQueue (с помощью C#)

Как я могу сказать, является ли удаленная очередь сообщений ? В документации указано, что метод" Exists " не работает для удаленных компьютеров.

следующее недопустимо (я знаю, что путь очереди точен, так как я могу отправлять сообщения в очередь):

if (!MessageQueue.Exists(@"FormatName:Direct=TCP:192.168.2.58Private$MyQueue"))
  throw new InvalidOperationException("Queue does not exist");

проблема в том, что отправка сообщения на сетевой адрес, за которым нет очереди прослушивания, не вызывает исключения. Наличие исключения для неверный адрес очереди имеет решающее значение для нашего приложения.

2 ответов


об этом есть статья:

альтернативный подход Фрэнка заключается в использовании других функций, которые MSMQ предоставляет, например, отрицательные сообщения подтверждения с очереди администрирования.

Что должно произойти, так это то, что:

  • сообщение будет успешно доставлено в конечную очередь
  • отрицательное подтверждение (NACK) будет возвращено в очередь администрирования с классом "Очередь назначения не существовать."(MQMSG_CLASS_NACK_BAD_DST_Q) в качестве альтернативы вы можете использовать отрицательный источник ведения журнала и, при сбое доставки, должен увидеть тот же класс NACK в соответствующей системе "сообщений с мертвой буквой" очередь.

В общем, не проверяйте, существует ли очередь, но вместо этого обрабатывайте недоставка сообщения, если окажется, что очередь не существовать.

http://blogs.msdn.com/johnbreakwell/archive/2008/07/31/checking-if-msmq-queues-exist-is-hard-work-so-should-you-bother.aspx


Что делать, если удаленный Q контролировался третьей стороной, где у вас нет никакого контроля?

вам лучше иметь какие-то проверки таймаута вместо того, чтобы полагаться на удаленную информацию.