Nservicebus 将FullControll授予与当前主机相关的MSMQ队列

Nservicebus 将FullControll授予与当前主机相关的MSMQ队列,nservicebus,Nservicebus,在我的组织中,我们使用Microsoft TFS部署组件。NServiceBus组件由BuildPortal作为Windows服务部署。它通常创建自动MSI包并将其部署在目标服务器上。要部署MSI包,构建门户使用服务帐户(管理员/超级用户)。NServiceBushot将不会使用相同的服务帐户运行,它将使用系统帐户或不同的服务帐户,该帐户在服务器上具有受限权限,并且该帐户不属于管理员组 简而言之,Host/install命令使用与实际nservicebushot执行不同的帐户运行。在安装过程中,

在我的组织中,我们使用Microsoft TFS部署组件。NServiceBus组件由BuildPortal作为Windows服务部署。它通常创建自动MSI包并将其部署在目标服务器上。要部署MSI包,构建门户使用服务帐户(管理员/超级用户)。NServiceBushot将不会使用相同的服务帐户运行,它将使用系统帐户或不同的服务帐户,该帐户在服务器上具有受限权限,并且该帐户不属于管理员组

简而言之,Host/install命令使用与实际nservicebushot执行不同的帐户运行。在安装过程中,安装程序(通过使用NServiceBus.Integration profile)创建所有必需的队列。现在,问题是,由于队列是由不同于原始服务帐户的帐户创建的,因此它抛出以下错误

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可能有助于重新关注这个问题
  • 我们必须使用受限帐户来运行不能是管理员的主机

我会尝试在安装基础设施中设置权限,或者这可能类似于使用
我想要取消预配置的性能计数器。您可能需要后者,我不确定在安装基础设施的
过程中使用了什么顺序,似乎NSB已经解决了权限问题。但是,我仍然能够在组件启动时看到错误消息的痕迹。无法验证队列是否存在。但是,NSB仍在继续执行,尽管它记录了此错误。到目前为止,我们看起来不错。