一:路徑錯誤(Path)錯誤安全
若是向遠程服務器發送消息,請使用格式名的形式,如:服務器
FormatName:Direct=TCP:121.0.0.1\\private$\\queue
FormatName:Direct=OS:machinename\\private$\\queuename
FormatName:DIRECT=http://222.10.xx.xx/msmq/Private$/test
注意一:FontName是區分大小寫的。若是表達式爲「FORMATNAME:Dire......」,是沒法工做的。
但這種表達式不會返回任何錯誤。FontName好像是表達式裏惟一區分大小寫的部分。
其餘部分能夠隨意使用大小寫,例如可使用「DIRECT」。
注意二:若是遠程服務器爲域中的服務器,則可以使用Direct=OS:machinename\Private$\...的形式發送消息。
若是遠程服務器爲非域中的服務器,則可使用TCP或http的形式發送。 網絡
二:當服務器爲非事務型隊列的時候,若是你使用了事務發送,也會有錯誤tcp
環境說明:向遠程服務器發送消息的時候,遠程服務器使用的是http的格式,
而且爲非事務型,如:FormatName:DIRECT=http://222.10.xx.xx/msmq/Private$/test
在咱們的程序中啓用了事務向服務器發送消息。結構程序沒有任何錯誤,查看本機的傳出隊列,以下圖:
解決方法:咱們隊程序測試檢查了好久,最終改成非事務發送方式可正常發送到服務器。學習
注意:首先肯定遠程服務器的隊列是事務型仍是非事務型隊列,而後發送程序必定要和遠程隊列匹配,否則消息沒法送達,而且也沒有任何的錯誤提示.測試
三:向遠程服務器發送消息,消息狀態:正在等待鏈接spa
網絡狀況是這樣的,測試用的機子都安裝了msmq組件,且都是在工做組模式下工做,兩個機子同在一個局域網內,具備一樣的網段。
我往本機專用消息隊列中收發消息都能成功,且往本機專用消息隊列發送消息,另外一臺機器從我機子上的專用消息隊列中也能正確接收消息,
就是我往另外一臺機子的消息隊列發送消息的時候,消息隊列打開成功,消息發送也成功,就是消息所有堆積在本機的傳出隊列裏,狀態爲正在等待鏈接。
另外一臺機的專用消息隊列里根本就沒有我所發送的消息。
而且把程序放到不一樣的機器上進行測試,一個是英文系統,一個是中文系統。向同一個遠程服務器發送消息都正常,沒有任何錯誤提示,但一直在本機的傳出隊列中。
故障現象:
服務器上MSMQ私有隊列 能夠接收 本服務器發送消息,沒法接收遠程計算機發送的消息操作系統
服務器IP爲10.9.3.2
客戶端發送的隊列爲 direct=tcp:10.9.3.2/$private/aasmansvc_input
消息狀態:正在等待鏈接
客戶端能夠ping的通服務器IP
部署程序的服務器和發送到遠程的服務器的messagequeue 服務都已經啓動orm
英文操做系統發送消息隊列:blog
中文操做系統發送消息隊列:
兩個發送消息的測試機都在本地的傳出隊列中顯示「正在等待鏈接」狀態。
解決方法:
1)首先考慮客戶端和遠程服務器端的防火牆是否容許經過。本人的測試機器都把防火牆關閉,依然有次問題。
2)檢查遠程服務器的MSMQ設置會有影響,在遠程服務器的消息隊列上點擊右鍵-->屬性,以下圖:
若是你是英文版的系統,在以下圖:
打配置界面,點擊「服務器安全」選項卡,以下圖:
勾選:啓用安全的遠程接收。由於我測試的發消息的服務器的系統都是2003的系統,而且:禁用未經身份驗證的RPC調用。
固然,我使用的是Win7系統做爲遠程隊列發送消息的機器是2003的系統,使用上圖的配置能夠正常發送消息。反過來從win7向2003的系統中的消息隊列發送消息,則以下設置也能夠正常發送:
另外,我在測試過程當中,發送事務型消息,從win7到2003測試失敗;從2003到win7測試失敗。不知道爲何事務型消息始終沒有測試經過,有多是服務器配置,有多是個人代碼有問題。留着之後慢慢解決吧。
若是你的遠程隊列是域中的服務器,會有點不同。點擊屬性後的以下圖:
以上是本人在測試的過程當中發現的沒有報錯信息的錯誤,記錄下來以便於方便你們相互學習,若是之後再遇到其餘問題,會補充在文章最後。
我的原創,轉載請註明出處。