Win Service получает разрешение на отказ в очереди сообщений - PullRequest
12 голосов
/ 17 сентября 2010

У меня есть 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();
    }

вот мой Config

<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 Ответ

31 голосов
/ 17 сентября 2010

Нашли решение!

Это потому, что сервис включен в NETWORK SERVICE пользователя. Вы должны установить разрешения для частного MSMQ, к которому вы обращаетесь сделать это

  1. открыть Управление компьютером
  2. Развернуть очередь сообщений
  3. Развернуть частные очереди
  4. щелкните правой кнопкой мыши на Очередь использования и выберите Свойства
  5. выберите вкладку безопасности и установите разрешения для локального пользователя
...