2012-02-01 2 views
13

Я бег NServiceBus 3.0.0 RC2, но когда я запустить приложение (как локальный администратор) без предварительного создания ошибок НЕГО MSMQ с:не создавая очереди автоматически в NServiceBus

Очередь не существует или у вас нет достаточных разрешений для выполнения операции.

Этого не происходило с использованием NServiceBus 2.6.

Ниже мой конфиг:

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

и

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

Я вижу метод расширения конфигурации, чтобы отключить автоматическое создание очередей, но ни один для включения его.

Если я предварительно создаю очереди, он отлично работает.

+0

Страдающий от той же проблемы этот AM ... –

ответ

15

Установщики не запускаются автоматически при самообслуживании. Обратитесь к global.asax.cs in the asyncpages sample за пример о том, как это сделать вручную.

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

Это сработало, спасибо –

+0

Я заметил, что это не создает очередь TimeOut. Будет ли он создавать его, когда ему это нужно? – Vaccano

+0

Да, если тайм-аут находится в очереди, будет создан –

11

Я обошел это, создав очередь на стороне клиента вручную (которая сама организована).

Не уверен, но я думал, что 2.x сделал это автоматически. Хост создает очереди автоматически, как и ожидалось, но не для клиента (самостоятельно размещен).

ОБНОВЛЕНИЕ: Как и Андреас, senor guardo camino, заявил, что вам нужно позвонить, установить вручную так;

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

Это создаст очереди, как ожидалось.

+0

Отличный ответ. Спасибо огромное! – Sergey

+0

Это все еще так с версией 5.2.6 и хостом NServiceBus 6.0.0? Я получаю: ERROR NServiceBus.Transports.Msmq.MsmqQueueCreator Не удалось создать ошибку очереди @ ... – pashute

Смежные вопросы