Win服务获取消息队列的权限被拒绝

时间:2010-09-16 23:25:56

标签: c#-4.0 windows-services nservicebus

我有一个无法启动的WinService,因为NServiceBus抛出“服务无法启动.System.Messaging.MessageQueueException(0x80004005):拒绝访问消息队列系统。”

这是在Windows 7上

我尝试将服务运行为:LocalSystem,Localservice和NetworkService

这是我如何设置NServiceBus

 private static IBus _serviceBus;
    private static AuditMessageHandler _messageHandler;

    public AuditQueueProcessor()
    {
        _messageHandler = new AuditMessageHandler();
        _serviceBus = Configure.With()
            .Log4Net()
            .DefaultBuilder()
            .XmlSerializer()
            .MsmqTransport()
            .IsTransactional(true)
            .PurgeOnStartup(false)
            .UnicastBus()
            .ImpersonateSender(false)
            .LoadMessageHandlers()
            .CreateBus()
            .Start();
    }

这是我的配置

<configuration>
  <configSections>
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/>
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/>

  </configSections>

  <MsmqTransportConfig InputQueue="LoggerInputQueue" ErrorQueue="LoggerInputError" NumberOfWorkerThreads="1" MaxRetries="5"/>

  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="Truckstop2.Imports.Objects.AuditMessage,Truckstop2.Imports.Objects" Endpoint="InputQueue@newimp001" />
    </MessageEndpointMappings>
  </UnicastBusConfig>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
</configuration>

1 个答案:

答案 0 :(得分:31)

找到了解决方案!

这是因为服务包含在NETWORK SERVICE用户中。 您需要为访问的私有MSMQ设置权限 这样做

  1. 打开计算机管理
  2. 展开消息队列
  3. 展开私人队列
  4. 右键单击您使用的队列,然后选择属性
  5. 选择安全选项卡并为本地用户设置权限