6

我正在尝试使用以下路径连接到远程私有 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>
4

4 回答 4

5

这是一个事务队列吗?无法从事务队列远程读取。也许 spring 框架会尝试检查这是否是一个事务队列,这也是一个仅在本地队列上支持的操作。

推荐使用队列的原因是写入远程队列并从本地队列读取。在 msmq 4.0(vista 和 windows 2008)中支持远程事务读取(所以我听说过)。

您可以调试spring.net代码并在流程失败时查看确切代码吗?

于 2008-12-17T22:22:28.480 回答
-1

您的尝试是正确的,但是您必须为您的对象定义其他两个属性,指示您的队列是否是远程的并且是否是事务性的:

<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>
于 2012-05-01T05:58:26.547 回答
-1

Microsoft 帮助文档指出专用队列仅在本地计算机上“可用”:

公共队列在整个消息队列网络中复制,并且可能被网络连接的所有站点访问。

私有队列不会在整个网络中发布。相反,它们仅在包含它们的本地计算机上可用。只有知道队列的完整路径名或标签的应用程序才能访问私有队列。

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

这实在是有点模棱两可!

Stack Overflow 上的另一篇文章引用了这篇文章:

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

其中对公共队列和私有队列有更有用的描述。

于 2010-10-28T09:52:56.730 回答
-1

首先映入我眼帘的是你的端点地址的大小写。至少在此线程或此处发布的所有其他示例都使用不同的大小写。其次,您没有转义字符串中的反斜杠。代替

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

尝试

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

hth,埃里希

于 2009-01-05T09:13:14.177 回答