Not creating queues automatically in NServiceBus

Not loved picture Not loved · Feb 2, 2012 · Viewed 7.6k times · Source

I'm running NServiceBus 3.0.0 rc2 but when I start the application (as local admin) without pre-creating the MSMQ's it errors with :

The queue does not exist or you do not have sufficient permissions to perform the operation.

This was not happening using NServiceBus 2.6.

Below is my config:

var bus = Configure.With()
    .Log4Net()
    .NinjectBuilder()
    .XmlSerializer()
    .DefiningCommandsAs(t => typeof(ICommand).IsAssignableFrom(t))
    .DefiningEventsAs(t => typeof(IEvent).IsAssignableFrom(t))
    .DefiningMessagesAs(t => typeof(IMessage).IsAssignableFrom(t))
    .MsmqTransport()
        .DefineEndpointName("subscriber.input")
        .IsTransactional(true)
        .PurgeOnStartup(false)
    .UnicastBus()
        .LoadMessageHandlers() 
        .ImpersonateSender(false)
    .CreateBus()
    .Start();

and

<configuration>
  <configSections>
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
  </configSections>    
  <MsmqTransportConfig ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />    
  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="MyEvents" Endpoint="publisher.input" />
    </MessageEndpointMappings>
  </UnicastBusConfig>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

I can see a config extension method to disable automatic creation of queues but none for enabling it.

If I pre-create the queues it works fine.

Answer

Andreas &#214;hlund picture Andreas Öhlund · Feb 2, 2012

Installers are not run automatically when you self host. Please see the global.asax.cs in the asyncpages sample for a example on how to do it manually.

using NServiceBus
using NServiceBus.Installation.Environments
...
Bus = Configure.With()
    .Log4Net()
    .DefaultBuilder()
    .XmlSerializer()
    .MsmqTransport()
    .IsTransactional(false)
    .PurgeOnStartup(false)
    .UnicastBus()
    .ImpersonateSender(false)
    .CreateBus()
    .Start(() => Configure.Instance.ForInstallationOn<Windows>().Install());