Сообщения 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