机器A上有一个名为queue1
的公共队列。我想从机器B向此队列发送消息。为了实现这一点,我编写了c#代码。
if (MessageQueue.Exists("machineA\queue1"))
{
label1.Text = "queue found";
}
else
{
label1.Text = "queue could not be found";
}
但是Exists()
方法在机器B上返回false
。相同的代码在机器C上运行良好。
我发现了一些与msmq域模式和工作组模式相关的东西。我认为msmq在机器B上以workgoup模式安装。
如何将此配置从工作组模式更改为域模式?
答案 0 :(得分:18)
HKEY_LOCAL_MACHINE \ SOFTWARE \微软\ MSMQ \参数\
检查REG_DWORD workgroup
的数据。是1还是0?
答案 1 :(得分:13)
基本上,域和工作组模式之间的区别不是由@engin提到的注册表标志“工作组”的值定义的。此标志仅反映当前的操作模式,但未设置它。
是否在域或工作组模式下运行是否已在域控制器或成员服务器上安装MSMQ。有关这两种模式之间差异的详细信息,请访问:https://support.microsoft.com/en-us/kb/884974/
MSMQ 1.0仅用于支持域模式。目前的MSMQ版本是5.0。
接下来,当您在DC上安装MSMQ时,您可能会看到非常有趣的行为,在每次MSMQ服务重新启动后,您的工作组标志会不断恢复为1。这意味着在安装目录服务集成之前,您必须向 Active Directory域服务中的计算机对象授予网络服务帐户创建MSMQ配置对象权限作为域控制器的计算机上的em>功能。
您可以在此处找到有关如何操作的详细信息:
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攻击的预防措施(尽管有这种改变的例外情况,而工作组模式就是其中之一)。
正如您在下面的Technet文章中所述,您需要向MSMQ对象授予某些权限 到网络服务或到计算机帐户在不是域控制器的Windows Server 2008 R2(或更高版本)计算机上安装路由服务功能时,或者在Windows Server 2008 R2(或更高版本)计算机上安装消息队列的目录服务集成功能时域控制器。详情请见:
https://technet.microsoft.com/en-us/library/cc749102(v=ws.10).aspx
答案 2 :(得分:8)
在托管队列的计算机上运行服务器管理器。右键单击“功能”,然后单击“添加功能”
在消息队列下和消息队列服务下深入查看。您应该看到目录服务集成的复选框。
选中它并单击“安装”。
通常您必须重新启动服务器才能显示更改。
答案 3 :(得分:4)
我遇到了一些问题,无论我安装或卸载了多少MSMQ或重新启动,我仍然无法使用该队列。所以我想在这里发布一些链接
http://support.microsoft.com/kb/935498
当涉及到#34;要解决此问题,请使用Active Directory用户和计算机Microsoft管理控制台(MMC)..."。以下是你如何做到这一点。
如何从活动目录中删除 http://technet.microsoft.com/en-us/library/cc773660(v=WS.10).aspx "删除陈旧的计算机对象"是你感兴趣的部分。
我还在事件日志中发现了这个错误的错误"消息队列服务不会加入域。新域中存在MSMQ配置(msmq)对象,其ID与服务ID不同。请删除新域中的MSMQ配置对象,重新启动消息队列服务,然后重新登录。" - 这有助于指出它们。
答案 4 :(得分:0)
我在Windows Server 2016上遇到了这个问题,甚至以为我将注册表值更改为域模式“ 0”,但在服务器重启后它又恢复为“ 1”。
要解决OS 2016上的问题,我们需要卸载自MS 2016起不推荐使用的MSMQ功能。 消息队列触发器 多播支持 路由服务