发送到DNS别名127.0.0.1的MSMQ消息以传出队列而不是本地队列结束
我正在使用msmqIntegrationBinding将消息发送到旧版MSMQ。我希望能够在prepod中使用与生产中相同的配置文件,但在prepod中,传统队列是本地的,而生产队列位于另一台服务器上 我想我可以用DNS别名来做 我已在Prepod服务器上的主机文件中将DNS别名设置为127.0.0.1发送到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
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