【问题标题】:Can't get NServiceBus running under custom service account?无法让 NServiceBus 在自定义服务帐户下运行?
【发布时间】:2014-04-13 22:25:56
【问题描述】:

我创建了一个简单的 NServiceBus 端点(它现在什么都不做),当我安装它时(使用NServiceBus.Host.exe /install /displayName:"MyEndpoint"),它会作为服务安装 在本地服务下运行,并且运行良好。

现在,当我将此 Windows 服务的运行身份帐户更改为我自己的本地服务帐户时(现在我们将其称为“svcTestAccount”,它具有作为服务登录权限),服务启动,然后意外在初始化过程中中途停止

我不知道为什么,因为没有异常记录到 log4net,进程就终止了。 我以前在以前的项目中看到过这种行为,当时端点无法访问它需要的队列,但是这次我已经配置了 5 个队列,我的端点给予“每个人”“完全控制”,所以它不应该是这样,对吧?

奇怪的是,当我运行它(在生产配置文件上使用 NServiceBus.Host.exe)时,它在以下所有情况下都可以愉快地运行:

  • 在 Visual Studio 2012 中,以本地管理员身份运行。
  • 作为 Windows 服务,在本地服务下运行
  • 作为 Windows 服务,在 Network Service 下运行
  • 如果 svcTestAccount 是本地管理员组的成员,则作为 Windows 服务在 svcTestAccount 下运行。
  • 从在 svcTestAccount 下运行的命令提示符(即“runas /user:svcTestAccount cmd”打开命令提示符,然后通过 NServiceBus.Host.exe 运行我的端点)

唯一不起作用的是让它在 svcTestAccount 下作为 Windows 服务运行(并且不是本地管理员组的成员)。

谁能告诉我这是怎么回事?

为了完整起见,我的端点仅包含:

public class EndpointConfig : IConfigureThisEndpoint, AsA_Publisher, IWantCustomInitialization
{
    public void Init()
    {
        Configure.With()
            .DefaultBuilder()
            .Log4Net();
    }
}

还有我的 web.config:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<configuration>
  <configSections>
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
  </configSections>

  <UnicastBusConfig>
    <MessageEndpointMappings>

    </MessageEndpointMappings>
  </UnicastBusConfig>
</configuration>

我在 Windows Server 2012 上使用 NServiceBus 4.3.0。

【问题讨论】:

  • svcTestAccount 帐户是否有权写入运行服务的文件夹? log4net可能无法创建日志文件

标签: c# msmq nservicebus windows-server-2012


【解决方案1】:

要将 NServiceBus 主机作为不同的帐户(不是本地系统)运行,您需要使用 /username/password 执行安装程序,例如:

NServiceBus.Host.exe /install /displayName:"MyEndpoint" /username:"mydomain\username" /password:"mysecretpassword"

请参阅http://docs.particular.net/NServiceBus/the-nservicebus-host#installation 了解更多信息。

【讨论】:

  • 这就是解决方案 - 显然,NServiceBus.Host 安装程序将指定用户添加到“性能监视器用户”组(并且可能还使用它做一些其他事情)。这意味着您不能只在本地服务下安装服务,然后更改登录身份凭据,因为您不会获得这些额外的权限。不过,我希望日志记录能更清楚地说明这一点。
  • 正确,安装还设置了队列的权限。我们将尝试在我们的文档中强调这一点!
  • @AndreasÖhlund:谢谢,希望这能防止其他人落入同样的陷阱。但是我首先查看的是日志(初始化的第一部分被完美记录),我惊讶地发现这个错误(显然)如此严重,以至于端点没有机会记录错误,并且该过程刚刚终止。它应该表现得像这样吗?
  • 听起来怪怪的。日志记录是我们设置的第一件事。我看看能不能搞清楚原因
猜你喜欢
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 2010-12-02
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多