queue1在机器A上有一个名为的公共队列.我想从机器B向此队列发送消息.为了实现这一点,我编写了c#代码.
if (MessageQueue.Exists("machineA\queue1"))
{
    label1.Text = "queue found";
}
else
{
    label1.Text = "queue could not be found";
}
但是机器B上的Exists()方法返回false.相同的代码在机器C上运行良好.
我找到了与msmq域模式和工作组模式相关的东西.我认为msmq在机器B上以workgoup模式安装.
如何将此配置从工作组模式更改为域模式?
Mik*_*ail 14
基本上,域和工作组模式之间的区别不是由@engin提到的注册表标志"工作组"的值定义的.此标志仅反映当前的操作模式,但未设置它.
无论是在域还是工作组模式下运行,都会定义您是在域控制器上还是在成员服务器上安装MSMQ.有关这两种模式之间差异的详细信息,请访问:https://support.microsoft.com/en-us/kb/884974/
MSMQ 1.0仅用于支持域模式.目前的MSMQ版本是5.0.
接下来,当您在DC上安装MSMQ时,您可能会看到非常有趣的行为,在每次MSMQ服务重新启动后,您的工作组标志会不断恢复为1.这意味着在作为域控制器的计算机上安装目录服务集成功能之前,必须向网络服务帐户授予对Active Directory域服务中的计算机对象的" 创建MSMQ配置对象"权限.
您可以在此处找到有关如何执行此操作的详细信息:https
:
 //technet.microsoft.com/en-us/library/cc730960.aspx
 MSMQ在(较少特权的)网络服务帐户下运行,而不是(所有强大的)本地系统帐户从4.0版开始(Vista/Server 2008)
因此,要更直接地回答@mkus问题"设置"域模式,您只需在域控制器上安装MSMQ,并确保为网络服务帐户提供适当的权限.完成此操作后,您可以看到它在域模式下运行,工作组标志自动切换为0以反映这一点.
还有几个链接来澄清有关MSMQ对象权限的问题以及何时/为什么需要设置它们:http: //blogs.msdn.com/b/johnbreakwell/archive/2009/08/03/default-msmq-queue-permissions -have-changed-in-msmq-4-0.aspx.简而言之,从MSMQ 4.0开始,Everyone和Anonymous Logon被从默认的MSMQ对象ACL中删除,作为针对DoS攻击的预防措施(虽然有这种改变的例外,而Workgroup模式就是其中之一).
正如你可以在Technet文章阅读下面你需要去一个给予一定rigts到MSMQ对象要么为网络服务或计算机帐户在Windows Server 2008 R2(或更高版本)的计算机上安装路由服务功能时不是域控制器或在作为域控制器的Windows Server 2008 R2(或更高版本)计算机上安装消息队列的目录服务集成功能时.详情请见:https:
 //technet.microsoft.com/en-us/library/cc749102(v = ws.10).aspx
在托管队列的计算机上运行服务器管理器.右键单击"功能",然后单击"添加功能"
在消息队列下和消息队列服务下深入查看.您应该看到目录服务集成的复选框.
检查并单击"安装".
通常,您必须重新启动服务器才能显示更改.
我遇到了一些问题,无论我安装或卸载MSMQ多少或重新启动,我仍然无法使用队列。所以我想在这里发布一些链接
http://support.microsoft.com/kb/935498
当谈到“要解决此问题,请使用 Active Directory 用户和计算机 Microsoft 管理控制台 (MMC)...”部分时。下面是你如何做到这一点。
如何从活动目录中删除 http://technet.microsoft.com/en-us/library/cc773660(v=WS.10).aspx “删除陈旧的计算机对象”是您感兴趣的部分。
我还在事件日志中发现了这个不错的错误“消息队列服务不会加入域。新域中存在 MSMQ 配置 (msmq) 对象,其 ID 与服务 ID 不同。请删除新域,重新启动消息队列服务,然后再次登录。”- 这有助于指出他们的方法。
| 归档时间: | 
 | 
| 查看次数: | 27784 次 | 
| 最近记录: |