2008-12-17 189 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> 
相关问题