2008-12-17 143 views
6

我試圖使用路徑連接到遠程專用MSMQ隊列:連接到專用遠程MSMQ隊列

"FormatName:DIRECT=OS:remoteMachineName\Private$\MyQueue" 

,我發現了以下錯誤:

"The specified format name does not support the requested operation. For example, a direct queue format name cannot be deleted." 

我很顯然,做錯了事情。但是,這可以使用本地隊列。

我正在使用Spring.Net的Messaging。這是我的配置

<objects xmlns="http://www.springframework.net"> 
    <object id="myQueue" type="Spring.Messaging.Support.MessageQueueFactoryObject, Spring.Messaging"> 
    <property name="Path" value="FormatName:DIRECT=OS:remoteMachineName\Private$\MyQueue"/> 
    </object> 

    <object id="messageQueueTemplate" type="Spring.Messaging.Core.MessageQueueTemplate, Spring.Messaging"> 
    <property name="DefaultMessageQueueObjectName" value="myQueue"/> 
    </object> 

    <object id="messageGateway" type="My.MessageGateway, My.Assembly"> 
    <property name="MessageQueueTemplate" ref="messageQueueTemplate"/> 
    </object> 
</objects> 
+0

你是一個Active Directory域中執行,或者是服務器是獨立的? – 2008-12-18 17:38:16

回答

5

這是一個事務性隊列嗎?從事務隊列遠程讀取是不可能的。也許Spring框架試圖檢查這是否是一個事務性隊列,而且這也是僅在本地隊列上受支持的操作。

推薦使用隊列的原因是寫入遠程隊列並從本地隊列讀取。在msmq 4.0(vista和windows 2008)中支持遠程事務讀取(所以我聽說過)。

你可以debbug的spring.net代碼,並看到確切的代碼,當進程失敗?

0

引起我眼球的第一件事就是您的終端地址的外殼。至少在此線程中發佈的所有其他示例或here都使用不同的套管。其次,你不會逃避字符串中的反斜槓。取而代之的

"FormatName:DIRECT=OS:remoteMachineName\Private$\MyQueue" 

嘗試

"FormatName:Direct=OS:remoteMachineName\\private$\\MyQueue" 

心連心, 埃裏希

+2

轉義反斜槓是C#編碼的東西。這不適用於XML配置文件。 此外,Ken的infosysblogs.com鏈接解釋說,區分大小寫僅適用於「FormatName」而非「Direct」。 – spoulson 2010-01-28 13:51:02

0

微軟的幫助文檔指出,專用隊列是從本地計算機上唯一的 「可用」:

公共隊列在整個消息隊列網絡中被複制,並可能被a訪問11個由網絡連接的站點。

Private隊列未在整個網絡上發佈。相反,它們僅在包含它們的本地計算機上有可用。專用隊列只能由知道隊列完整路徑名或標籤的應用程序訪問。

(來自:http://msdn.microsoft.com/en-us/library/19ww660c(VS.71).aspx)。

這真的有點含糊不清!

堆棧溢出另一篇文章引用這篇文章:

http://technet.microsoft.com/ja-jp/library/cc753440(WS.10).aspx

其中有公共VS專用隊列更加有用的描述。

+8

最初的觀點有點令人誤解。專用隊列可遠程使用,它們不會發布到Active Directory。如您所說,要訪問遠程專用隊列,您需要知道隊列的完整路徑名稱或標籤。 – 2011-06-01 05:46:02

0

你的努力是正確的,但你必須定義,表明你的隊列是遠程的或不和是事務性的或不適合你的對象另外兩個屬性:

<object id="myQueue" 
     type="Spring.Messaging.Support.MessageQueueFactoryObject,Spring.Messaging">  
    <property name="Path" value="FormatName:DIRECT=OS:remoteMachineName\Private$\MyQueue"/> 
    <property name="RemoteQueue" value="true"/> 
    <property name="RemoteQueueIsTransactional" value="true"/> 
</object>