Подключение к удаленной очереди через файл hosts - PullRequest
3 голосов
/ 10 ноября 2009

У меня есть разные среды для моего приложения (Dev -> Test -> Prod), и я использую MSMQ.

У меня также есть имя очередей (они являются удаленными очередями), которые я использую через файлы конфигурации, в следующем формате:

FormatName:Direct=SERVER_NAME\Private$\MY_QUEUE

Моя проблема в том, что SERVER_NAME отличается в разных средах, и я хотел бы делегировать эту проблему на сервер (то есть: для баз данных у меня есть псевдонимы с одинаковыми именами на всех 3 серверах, и каждый из них указывает на фактический сервер БД)

Я попытался добавить сервер очереди в файл hosts, но это не удалось из-за следующей ошибки:

Очередь не существует или у вас недостаточно прав для выполнения операции.

Я пытался FormatName:Direct, FormatName:OS и FormatName:TCP

Буду очень признателен за любую помощь (обходной путь, новые идеи, как заставить это работать).

Цель состоит в том, чтобы иметь один файл конфигурации, который работал бы во всех средах.

Ответы [ 3 ]

3 голосов
/ 17 ноября 2009

Мы также используем файл hosts в нашей среде и выяснили (сложный путь), что MSMQ не поддерживает его. Наше решение состоит в том, чтобы использовать уровень абстракции (ITransport) поверх MSMQ, и позволить этому уровню заменить имена хостов (которые могут быть найдены в файле хостов) на IP-адреса. Это легко сделать с помощью Dns класса .

2 голосов
/ 10 ноября 2009

Это всего лишь предположение, и я не могу проверить это в данный момент, но:

Причиной сбоя является то, что msmq использует аутентификацию kerberos. Которые аутентифицируют обе стороны обмена. Ваша сторона обращается к серверу с «неправильным» именем. Поэтому, когда сервер пытается аутентифицироваться с вами (клиентом). Windows может «сказать», что это не тот сервер, который вы ищете. Таким образом, он не проходит аутентификацию.

Возможно, есть способы обойти это. Но это поставит под угрозу безопасность. Я хотел бы добавить три имени целевых серверов (dev, qa и production) в файл конфигурации. И выберите между ними какой-нибудь параметр, например имя домена, имя пользователя, имя компьютера или что-то подобное, что также отличается в вашей другой среде.

0 голосов
/ 10 ноября 2009

Указанные вами имена форматов недействительны. Должно быть:

FormatName:Direct=OS:SERVER_NAME\Private$\MY_QUEUE

или если вы хотите использовать вместо этого IP-адрес:

FormatName:Direct=TCP:XXX.XXX.XXX.XXX\Private$\MY_QUEUE
...