无法使MSMQ正常工作

时间:2012-10-15 22:13:10

标签: c# msmq

我正在尝试在同一域内的两台不同计算机上的两个服务之间建立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”

只要我可以做我需要的,队列对我来说是私人的还是公开的并不重要。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

回答您的疑问:

  

我有一个设置,其中队列存在于辅助和   主要可以发送和次要接收,但我无法清除   我需要来自小学。

您拥有的初始设置,辅助和主要发送到辅助节点的队列是正确的配置。不确定为什么您无法从主服务器清除辅助队列。这可能只是队列权限的一个简单情况。尝试授予对主服务器上运行的服务帐户的完全控制权。

  

所以我试图改变这种情况。我把队列放在小学,但是   然后我无法发送到私人本地队列

再次,不确定为什么会这样。你收到什么错误?你可以enable MSMQ tracing在两台机器上给你带来任何传输错误。无论如何,这不是正确的配置。 发送远程 - 接收本地总是最好的。

  

Primary =“。\ nw”

在所有情况下使用完全格式化的msmq地址总是更好,以避免解决问题。

  

如果队列对我来说是私有的还是公开的

并不重要

这真的很重要。公共队列用于具有高容量,集群和/或路由要求的企业级配置,无论如何,您必须将它们注册到活动目录才能使它们工作。如果你只是想从一个地方发送东西总是使用私人队列。

我的建议是恢复初始设置并专注于远程清除工作。