好的,这是一个非常简单和基本的问题。如果我在windows计算机A上有一个想要写入windows计算机B上的队列的应用程序,我是否需要在计算机A上安装MSMQ (即使那里没有队列)?我刚刚开始在我的应用程序中使用队列,并试图弄清楚一些基本原理。
谢谢
发布于 2011-06-11 00:11:14
是的,您需要在本地安装MSMQ才能写入远程队列。如果您正在写入私有队列,请查看this page,其中包含有关如何格式化队列名称的有用信息。如果要写入远程事务队列,则需要确保正确指定(第5点)
这是文章正文:
machinename\private$\queuename格式的队列名称不起作用。这会导致"invalid queue path“错误。FormatName:Direct=OS:machinename\\private$\\queuename提及。这是必要的,因为队列访问是在内部使用格式名称语法完成的。另一个友好的表示被转换为FormatName,然后使用。在处理远程队列时,除非有AD来解析队列名称,否则友好名称将不起作用。有关详细信息,请查看文档。
例如。
("FormatName:Direct=OS:machinename\private$\queue");Atul");
FORMATNAME:Direct=OS:machinename\\private$\\queuename,它将不起作用。令人惊讶的是,在这种情况下没有抛出错误。字符串的"FormatName“部分似乎是唯一区分大小写的部分。其他的可以以不同的大小写出现。例如。你可以写“直接”。
FormatName:Direct=TCP:ipaddress\\private$\\queuename。例如。
MessageQueue rmQ = MessageQueue MessageQueue rmQ.Send("sent to regular queue -Atul“);
发送队列=新队列("FormatName:Direct=OS:machinename\private$\queue");rmTxnQ.Send("sent to Txn rmTxnQ - Atul",MessageQueueTransactionType.Single);
如果事务属性不匹配,消息将不会被传递。同样令人惊讶的是,我没有收到任何错误,消息只是disappeared
的状态(已连接或未连接)和IP地址
发布于 2011-06-11 21:19:22
所有MSMQ通信都需要在两端都有一个MSMQ队列管理器。使用MSMQ的应用程序与它们的本地队列管理器通信,后者为它们做这项工作。使用MSMQ的应用程序不能直接与任何队列通信,无论是本地队列还是远程队列。
发布于 2011-06-11 18:37:02
另一种方法(而不是在运行客户端的本地机器上安装MSMQ )是实现一个从MSMQ队列获取消息的WCF服务。在这种情况下,您的远程客户端只需指定远程服务端点,它就可以直接写入远程队列。您还必须注意远程队列上的安全性设置是否正确。
我认为这将是实现基于队列的通信的更好方法。这是一个简短的答案,但如果您感兴趣,我将很乐意扩展(我注意到您对另一个答案非常满意:)
https://stackoverflow.com/questions/6308668
复制相似问题