如何将Msmq配置从工作组模式更改为域模式?

mku*_*kus 16 msmq

queue1在机器A上有一个名为的公共队列.我想从机器B向此队列发送消息.为了实现这一点,我编写了c#代码.

if (MessageQueue.Exists("machineA\queue1"))
{
    label1.Text = "queue found";
}
else
{
    label1.Text = "queue could not be found";
}
Run Code Online (Sandbox Code Playgroud)

但是机器B上的Exists()方法返回false.相同的代码在机器C上运行良好.

我找到了与msmq域模式和工作组模式相关的东西.我认为msmq在机器B上以workgoup模式安装.

如何将此配置从工作组模式更改为域模式?

小智 18

HKEY_LOCAL_MACHINE\SOFTWARE \微软\ MSMQ \参数\

检查REG_DWORD的数据workgroup.是1还是0?

  • 1是工作组模式.
  • 0是AD模式


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


Jef*_*vis 8

在托管队列的计算机上运行服务器管理器.右键单击"功能",然后单击"添加功能"

在消息队列下和消息队列服务下深入查看.您应该看到目录服务集成的复选框.

检查并单击"安装".

通常,您必须重新启动服务器才能显示更改.


Cyr*_*ney 5

我遇到了一些问题,无论我安装或卸载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 不同。请删除新域,重新启动消息队列服务,然后再次登录。”- 这有助于指出他们的方法。