发送到DNS别名127.0.0.1的MSMQ消息以传出队列而不是本地队列结束

发送到DNS别名127.0.0.1的MSMQ消息以传出队列而不是本地队列结束,dns,msmq,msmqintegrationbinding,Dns,Msmq,Msmqintegrationbinding,我正在使用msmqIntegrationBinding将消息发送到旧版MSMQ。我希望能够在prepod中使用与生产中相同的配置文件,但在prepod中,传统队列是本地的,而生产队列位于另一台服务器上 我想我可以用DNS别名来做 我已在Prepod服务器上的主机文件中将DNS别名设置为127.0.0.1 127.0.0.1 CRM_SERVER 我已将客户端中的端点配置为使用DNS别名使用直接OS formatname <endpoint name="LegacyMsmqService

我正在使用msmqIntegrationBinding将消息发送到旧版MSMQ。我希望能够在prepod中使用与生产中相同的配置文件,但在prepod中,传统队列是本地的,而生产队列位于另一台服务器上

我想我可以用DNS别名来做

我已在Prepod服务器上的主机文件中将DNS别名设置为127.0.0.1

127.0.0.1 CRM_SERVER
我已将客户端中的端点配置为使用DNS别名使用直接OS formatname

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

我已经将
HKEY\U LOCAL\U MACHINE\Software\Microsoft\MSMQ\Parameters\IgnoreOSNameValidation
注册表项设置为1,甚至还将
CRM\U服务器
添加到
HKEY\U LOCAL\U MACHINE\System\CurrentControlSet\Services\LanmanServer\Parameters\OptionalNames
项中

我至少重新启动了十几次

每当我的客户机向队列发送消息时,它都会在传出队列上结束,而不是在本地队列上结束。使用正确的机器名或本地主机可以正常工作


我错过了什么吗?

要通过DNS解决问题,请使用DNS名称而不是IP,方法如下:

FORMATNAME:Direct=OS:CRM_SERVER\crmintegration
正如您在问题中所指出的,在MSMQ客户机上设置IgnoreOSNameValidation参数(您的预处理机器既是客户机又是服务器)(per)非常重要。以下是一种命令行方法:

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
注意:插入队列条目可以改为使用格式名称中的TCP协议进行解析——但对于从队列读取,您不能使用TCP(回想一下,MSMQ是旧技术):

FORMATNAME:Direct=TCP:CRM_SERVER\crmintegration