如何将 Msmq 配置从工作组模式更改为域模式?
Posted
技术标签:
【中文标题】如何将 Msmq 配置从工作组模式更改为域模式?【英文标题】:How to change Msmq configuration from workgroup mode to domain mode? 【发布时间】:2011-01-13 00:14:41 【问题描述】:机器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 模式安装。
如何将此配置从工作组模式更改为域模式?
【问题讨论】:
【参考方案1】:HKEY_LOCAL_MACHINE\Software\Microsoft\MSMQ\Parameters\
检查 REG_DWORD workgroup
的数据。是 1 还是 0?
【讨论】:
【参考方案2】:基本上域和工作组模式之间的区别不是由@engin 提到的注册表标志“工作组”的值定义的。此标志仅反映当前操作模式,但不设置它。
您是在域模式下运行还是在工作组模式下运行取决于您是在域控制器上还是在成员服务器上安装 MSMQ。有关这两种模式之间差异的详细信息可以在这里找到:https://support.microsoft.com/en-us/kb/884974/
MSMQ 1.0 用于仅支持域模式。当前的 MSMQ 版本是 5.0。
接下来,当您在 DC 上安装 MSMQ 时,您可能会看到非常有趣的行为,每次 MSMQ 服务重新启动后,您的工作组标志会不断恢复为 1。这意味着您必须在安装目录服务集成之前授予网络服务帐户创建 MSMQ 配置对象权限以访问 Active Directory 域服务中的计算机对象 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 对象授予某些权限,授予网络服务或授予计算机帐户 strong> 在不是域控制器的 Windows Server 2008 R2(或更高版本)计算机上安装路由服务功能时,或在 Windows Server 2008 R2(或更高版本)计算机上安装消息队列的目录服务集成功能时域控制器。在此处查看详细信息: https://technet.microsoft.com/en-us/library/cc749102(v=ws.10).aspx
【讨论】:
这是域控制器安装的正确答案。请参阅 Mikhail technet.microsoft.com/en-us/library/cc730960.aspx 的此链接 知道如何在 Windows 10 上执行您所说的任何操作吗?【参考方案3】:在托管队列的机器上运行服务器管理器。右键单击功能,然后单击“添加功能”
在消息队列和消息队列服务下向下钻取。您应该会看到一个目录服务集成复选框。
检查它并单击安装。
通常您必须重新启动服务器才能显示更改。
【讨论】:
【参考方案4】:我遇到了一些问题,无论我安装或卸载多少 MSMQ 或重新启动,我仍然无法使用队列。所以我想在这里发布一些链接
http://support.microsoft.com/kb/935498
当谈到“要解决此问题,请使用 Active Directory 用户和计算机 Microsoft 管理控制台 (MMC)...”时。以下是您的操作方法。
如何从活动目录中删除 http://technet.microsoft.com/en-us/library/cc773660(v=WS.10).aspx “删除陈旧的计算机对象”是您感兴趣的部分。
我还在事件日志中发现了这个很好的错误“消息队列服务将不会加入域。新域中存在一个 ID 与服务 ID 不同的 MSMQ 配置 (msmq) 对象。请删除 MSMQ 配置新域中的对象,重新启动消息队列服务,然后再次登录。” - 这有助于指出他们的方式。
【讨论】:
我遇到了同样的问题,并找到了另一个有用的文档。 MSMQ 安装限制部分technet.microsoft.com/en-us/library/cc749102(v=ws.10).aspx【参考方案5】:我在 windows server 2016 上遇到过这个问题,我什至认为我正在将注册表值更改为域模式“0”,但在服务器重新启动后它恢复为“1”。
为了解决 OS 2016 上的问题,我们需要卸载以下 MSMQ 功能,因为它们从 OS 2016 开始已被弃用。 消息队列触发器 多播支持 路由服务
【讨论】:
以上是关于如何将 Msmq 配置从工作组模式更改为域模式?的主要内容,如果未能解决你的问题,请参考以下文章