2009-11-10 71 views
3

我的應用程序有不同的環境(Dev - > Test - > Prod),而且我正在使用MSMQ。通過主機文件連接到遠程隊列

我也有隊列的名稱(他們是遠程隊列)我通過配置文件使用,採用以下格式:

FormatName:Direct=SERVER_NAME\Private$\MY_QUEUE 

我的問題是SERVER_NAME是在不同的環境不同,我我想將該問題委託給服務器(例如:對於我在所有3臺服務器中都有相同名稱的別名的數據庫,它們都指向實際的數據庫服務器)

我嘗試將隊列服務器添加到主機文件,但失敗,出現以下錯誤:

The queue does not exist or you do not have sufficient permissions to perform the operation.

我試過FormatName:DirectFormatName:OS,並FormatName:TCP

任何幫助(解決方法,新思路,如何使這項工作)將得到高度讚賞。

目的是讓一個配置文件可以在所有環境下工作。

回答

3

我們也在我們的環境中使用hosts文件,並發現(困難的方式)MSMQ不支持它。 我們的解決方案是通過MSMQ使用抽象層(ITransport),並讓該層用ip地址替換主機名(可能在主機文件中找到)。這很容易使用Dns class完成。

+1

非常好,我可以替換字符串連接到隊列與ip通過閱讀與Dns類! – juan 2009-11-17 13:37:15

0

您指定的格式名稱無效。它應該是:

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

,或者如果你想使用的IP地址來代替:

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

我嘗試了所有這一切,因爲它在我的問題中說... – juan 2009-11-10 20:22:53

2

這只是一個猜測,我不能在這一刻驗證這一點,但:

失敗的原因是msmq使用kerberos身份驗證。認證交易所的雙方。你的身邊正在用「錯誤」的名字訪問服務器。所以當服務器嘗試與您(客戶端)進行身份驗證時。 Windows可以「告訴」這不是你正在尋找的服務器。所以它認證失敗。

有可能有辦法規避這種情況。但它會危及安全。我建議將目標服務器的三個名稱(dev,qa和production)放在配置文件中。並選擇它們之間的一些參數,如域名,用戶名,計算機名稱或其他類似的東西,在你的不同環境中也是不同的。

+0

有趣的建議,沒想到那 – juan 2009-11-10 20:24:07

相關問題