通过hosts文件连接到远程队列

时间:2009-11-10 14:36:40

标签: c# security configuration msmq

我的应用程序有不同的环境(Dev - > Test - > Prod),我正在使用MSMQ。

我也有通过配置文件使用的队列名称(它们是远程队列),格式如下:

FormatName:Direct=SERVER_NAME\Private$\MY_QUEUE

我的问题是SERVER_NAME在不同的环境中是不同的,我想将该问题委托给服务器(即:对于数据库,我在所有3个服务器中都有相同名称的别名,它们都指向实际的数据库服务器)

我尝试将队列服务器添加到hosts文件中,但它失败并出现以下错误:

  

队列不存在或您没有足够的权限来执行操作。

我尝试了FormatName:DirectFormatName:OSFormatName:TCP

任何帮助(解决方法,新想法,如何做到这一点)都将受到高度赞赏。

目标是拥有一个适用于所有环境的配置文件。

3 个答案:

答案 0 :(得分:3)

我们也在我们的环境中使用主机文件,并发现(困难的方式)MSMQ不支持它。 我们的解决方案是在MSMQ上使用抽象层(ITransport),并让该层用ip地址替换主机名(可能在hosts文件中找到)。使用Dns class即可轻松完成。

答案 1 :(得分:2)

这只是一个猜测,我现在无法验证这一点,但是:

失败的原因是msmq使用kerberos身份验证。哪个认证交换双方。您的一方正在使用“错误”的名称访问服务器。因此,当服务器尝试与您(客户端)进行身份验证时。 Windows可以“告诉”这不是您正在寻找的服务器。所以它没有通过身份验证。

可能有办法规避这一点。但它会危及安全。我建议将目标服务器的三个名称(dev,qa和production)放在配置文件中。并在它们之间选择一些参数,如域名,用户名,计算机名称或其他类似的东西,在不同的环境中也是不同的。

答案 2 :(得分:0)

您指定的格式名无效。它应该是:

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

或者如果您想使用IP地址:

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