我正在尝试在同一域内的两台不同计算机上的两个服务之间建立msmq通信。
机器是主要 - 次要情况。
我需要能够从主要发送和清除,并从次要接收
我似乎无法找到允许这样做的设置。我有一个设置,其中队列存在于辅助节点,主节点可以发送和辅助接收但是我无法根据需要从主节点中清除。我相信这是因为队列是私人和偏远的。
所以我试图改变这种情况。我将队列放在主节点上,但后来我无法发送到私有本地队列,因此我将它们公开,现在我无法让辅助节点找到远程公共队列。
if (!MessageQueue.Exists(queueName))
{
//log they don't exist and exit
throw new Exception("One or more of the required queues do not exist");
}
syncQ = new MessageQueue(queueName){Formatter = new XmlMessageFormatter(new Type[] {typeof (String)})};
if (machineState == MachineState.Primary)
{
syncQ.SetPermissions(ASPConfiguration.SyncUser, MessageQueueAccessRights.FullControl, AccessControlEntryType.Allow);
syncQ.Purge();
}
Primary =“。\ nw”
Secondary =“FormatName:Direct = OS:CACTEST-WS-D \ nw”
只要我可以做我需要的,队列对我来说是私人的还是公开的并不重要。
感谢您的帮助。
答案 0 :(得分:2)
回答您的疑问:
我有一个设置,其中队列存在于辅助和 主要可以发送和次要接收,但我无法清除 我需要来自小学。
您拥有的初始设置,辅助和主要发送到辅助节点的队列是正确的配置。不确定为什么您无法从主服务器清除辅助队列。这可能只是队列权限的一个简单情况。尝试授予对主服务器上运行的服务帐户的完全控制权。
所以我试图改变这种情况。我把队列放在小学,但是 然后我无法发送到私人本地队列
再次,不确定为什么会这样。你收到什么错误?你可以enable MSMQ tracing在两台机器上给你带来任何传输错误。无论如何,这不是正确的配置。 发送远程 - 接收本地总是最好的。
Primary =“。\ nw”
在所有情况下使用完全格式化的msmq地址总是更好,以避免解决问题。
如果队列对我来说是私有的还是公开的
并不重要
这真的很重要。公共队列用于具有高容量,集群和/或路由要求的企业级配置,无论如何,您必须将它们注册到活动目录才能使它们工作。如果你只是想从一个地方发送东西总是使用私人队列。
我的建议是恢复初始设置并专注于远程清除工作。