Проверить наличие очереди можно методом MessageQueue.Exists . Обратите внимание, что вы должны использовать стандартный формат адресации MSMQ,
FORMATNAME:DIRECT=OS:(server name)\PRIVATE$\(queue name)
Тем не менее, проверка наличия очереди сообщений перед инициализацией отправителя своего рода сводит на нет цель использования очереди сообщений в первую очередь.
Одна из причин, по которой вы хотите использовать организацию очередей, заключается в том, что вашему отправителю не нужно знать о доступности конечной точки получателя. Это не волнует, потому что может отправлять сообщение, даже если очередь получателя недоступна .
Причина, по которой он может это сделать, заключается в том, что MSMQ реализует шаблон обмена сообщениями с сохранением и пересылкой, что означает, что любые отправленные сообщения сначала сохраняются локально, а затем отправляются. Это защищает отправителя от сбоев в конечной точке назначения и гарантирует, что сообщения не будут потеряны.
Это также означает, что не будет сообщения об ошибке, что адрес очереди указывает на несуществующую очередь . Сообщение будет просто превышено по истечении заданного времени и помечено как недоставленное.
ОБНОВЛЕНИЕ Как отмечает Джон Брэкуэлл в своем комментарии: Не так. Сообщение MSMQ будет доставлено удаленному администратору очередей и, если очередь не существует, будет отброшено. При ведении журнала с отрицательным исходным кодом копия отклоненного сообщения будет помещена в соответствующую очередь недоставленных сообщений отправителя
Надеюсь, это поможет.
UPDATE
Мне пришла в голову ситуация, когда вы хотели бы проверить наличие очереди перед отправкой, то есть если вы порождаете свою очередь программно на основе какого-то бизнес-правила.