2012-02-01 10 views
13

estoy corriendo NServiceBus 3.0.0 RC2, pero cuando inicio la aplicación (como administrador local) sin la creación previa de errores informáticos de la MSMQ con:no crear colas de forma automática en NServiceBus

La cola no existe o no tienes suficientes permisos para realizar la operación.

Esto no sucedía con NServiceBus 2.6.

A continuación es mi 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(); 

y

<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> 

puedo ver un método de extensión de configuración para desactivar la creación automática de colas, pero ninguno para habilitarlo.

Si precreo las colas, funciona bien.

+0

Sufriendo del mismo problema que este ... –

Respuesta

15

Los instaladores no se ejecutan automáticamente cuando se aloja. Consulte el global.asax.cs in the asyncpages sample para ver un ejemplo sobre cómo hacerlo manualmente.

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()); 
+0

Eso funcionó, gracias –

+0

Noté que esto no crea la cola TimeOut. ¿Lo creará cuando lo necesite? – Vaccano

+0

Sí, si el timeoutmanager está en la cola se creará –

11

Me solucioné esto creando manualmente la cola en el lado del cliente (que está alojada automáticamente).

No estoy seguro, pero pensé que 2.x lo hizo automáticamente. El host está creando las colas automáticamente, como se esperaba, pero no el cliente (alojado por sí mismo).

ACTUALIZACIÓN: Al igual que Andreas, senor guardo camino, declaró, debe llamar a la instalación manualmente así;

.Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install()); 

Esto creará las colas como se esperaba.

+0

Gran respuesta. Muchas gracias! – Sergey

+0

¿Sigue siendo así con la versión 5.2.6 y NServiceBus host 6.0.0? Recibo: ERROR NServiceBus.Transports.Msmq.MsmqQueueCreator No se pudo crear un error de cola @ ... – pashute

Cuestiones relacionadas