Сообщения MSMQ, отправленные на псевдоним DNS для 127.0.0.1, заканчиваются в исходящей очереди вместо локальной очереди

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

Я думал, что смогу сделать это с псевдонимом DNS.

Я установил псевдоним DNS в файле HOSTS на моем сервере preprod на 127.0.0.1

127.0.0.1 CRM_SERVER

Я настроил конечную точку в клиенте для использования имени формата DIRECT OS с использованием псевдонима DNS

 <endpoint name="LegacyMsmqService" 
           address="msmq.formatname:DIRECT=OS:CRM_SERVER\crmintegration" 
           binding="msmqIntegrationBinding" 
           contract="Integration.Facades.ILegacyMsmqService" 
           bindingConfiguration="msmqIntegrationBinding"/>

Я установил HKEY_LOCAL_MACHINE\Software\Microsoft\MSMQ\Parameters\IgnoreOSNameValidation ключ реестра в 1, и я даже добавить CRM_SERVER к HKEY_Local_Machine\System\CurrentControlSet\Services\LanmanServer\Parameters\OptionalNames ключ.

Я перезапустил по крайней мере дюжину раз!

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

Я что-то пропустил?

1 ответ

Для разрешения через DNS используйте DNS-имя, а не IP-адрес следующим образом:

FORMATNAME:Direct=OS:CRM_SERVER\crmintegration

Как вы отметили в своем вопросе, важно установить параметр IgnoreOSNameValidation на клиенте MSMQ (ваш компьютер preprod является и клиентом, и сервером) (согласно http://support.microsoft.com/kb/306785). Вот способ командной строки, чтобы сделать это:

reg.exe ADD HKLM\Software\Microsoft\MSMQ\Parameters /V IgnoreOSNameValidation /t REG_DWORD /d 1 /f

или, если вы предпочитаете, powershell:

Set-ItemProperty -Path HKLM:\Software\Microsoft\MSMQ\Parameters -Name IgnoreOSNameValidation -Value 1

ПРИМЕЧАНИЕ: вставка в записи QUEUE может разрешить использование протокола TCP в имени формата, но для чтения из очереди вы не можете использовать TCP (напомним, MSMQ - старая технология):

FORMATNAME:Direct=TCP:CRM_SERVER\crmintegration
Другие вопросы по тегам