在我的组织中,我们正在使用 Microsoft TFS 部署我们的组件。NServiceBus 组件由 BuildPortal 部署为 Windows 服务。它通常创建自动化的 MSI 包并将其部署在目标服务器上。要部署 MSI 包,构建门户使用服务帐户(管理员/超级用户)。NServiceBusHost 不会使用相同的服务帐户运行,它会使用系统帐户或不同的服务帐户,该服务帐户在服务器上具有受限权限,并且该帐户不会是管理员组的一部分。
简而言之,Host /install 命令使用与实际 NServiceBusHost 执行不同的帐户运行。在安装过程中,所有必需的队列都由安装程序创建(通过使用 NServiceBus.Integration 配置文件)。现在,问题是,由于与原始服务帐户不同的帐户创建的队列,它会引发以下错误。
Message:Could not create queue error@xxxxxxx01 or check its existence. Processing will still continue.
NServiceBus.Utils.MsmqUtilities.CreateQueueIfNecessary(:0)
System.Messaging.MessageQueueException (0x80004005): Access to Message Queuing system is denied.
at System.Messaging.MessageQueue.SetPermissions(AccessControlList dacl)
at NServiceBus.Utils.MsmqUtilities.SetPermissionsForQueue(String queue, String account)
at NServiceBus.Utils.MsmqUtilities.CreateQueueIfNecessary(Address address, String account)
为了解决上述错误,我们尝试使用 INeedToInstallSomething。但是,没有关于如何使用或在 Install() 方法中使用什么的适当文档/示例。当我们调用Configure.Instance.ForInstallationOn().Install()时,安装程序没有按预期创建队列。我们想要的是,获取当前安装程序的依赖队列列表并设置类似这样的权限>> messageQueue.SetPermissions(serviceAccount, MessageQueueAccessRights.FullControl)
这是否可以获取当前主机的所有依赖队列并仅在主机安装期间分配权限。
笔记:
- 我们暂时不想将此逻辑移到主机之外。是的,拥有一个简单的 PSS 可能有助于解决这个问题。
- 我们必须使用受限帐户来运行不能是管理员的主机。