2009-10-22 3 views
1

У меня возникли проблемы с отправкой сообщения через NServiceBus. У меня есть веб-приложение ASP.Net MVC, разработка на Win7 x64, я настроил мой web.config, какNServiceBus MSMQ Отправить вопрос

 <MsmqTransportConfig InputQueue="worker" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" /> 

    <UnicastBusConfig> 
    <MessageEndpointMappings> 
     <add Messages="PricingInformation.Messages" Endpoint="worker2" /> 
    </MessageEndpointMappings> </UnicastBusConfig> 

В Application_Start я телеграфировать следующее:

var bus = NServiceBus.Configure.WithWeb() 
      .StructureMapBuilder() 
      .XmlSerializer() 
      .MsmqTransport() 
       .IsTransactional(false) 
       .PurgeOnStartup(false) 
      .UnicastBus() 
       .ImpersonateSender(false) 
      .CreateBus() 
      .Start(); 

Когда действие I» м интересует происходит в приложении I огнь

public override void HandleEvent(SupplierPricingUpdatedEvent updatedEvent) 
    { 
     bus.Send(new ModelSupplierDetailsUpdatedMessage() {Id = updatedEvent.Id}) 
     return; 
    } 

ModelSupplierDetailsUpdatedMessage просто класс PricingInformation.Messages с использованием интерфейса маркерами IMessage и украшен сериализуемым атрибутом.

Очередь MSMQ настроена, не транзакционная, и все, включая NETWORK SERVICE и IIS_IUSRS имеет полный контроль (в рамках мер по deseperate устранения неисправностей)

log4net показывает следующее:

DEBUG NServiceBus.Utils.MsmqUtilities 14 - Checking if queue exists: worker. 

DEBUG NServiceBus.Utils. MsmqUtilities 14 - Проверка наличия очереди: ошибка. DEBUG NServiceBus.Unicast.UnicastBus Worker.15 - Вызов «HandleBeginMessage» на NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule INFO NServiceBus.Unicast.UnicastBus Worker.15 - рабочий инициализирован. DEBUG NServiceBus.Unicast.UnicastBus Worker.15 - Вызов 'HandleEndMessage' на NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule DEBUG NServiceBus.Unicast.UnicastBus 9 - Отправка сообщения PricingInformation.Messages.ModelSupplierDetailsUpdatedMessage, PricingInformation.Messages, Version = 1,0. 0.0, Culture = нейтраль, PublicKeyToken = null с идентификатором 2c642672-1bf1-48d4-a90f-734e2fdd726d \ 8267 для рабочего места2.

Но независимо от того, что я пытаюсь, и что я настраиваю (уже три часа на нем), сообщение никогда не появляется в очереди. Я не могу найти исключение, и у меня есть уровень отладки на всех. Вероятно, что-то простое помогает.

ответ

6

Проблема в том, что если вы вручную настроили свои очереди как не транзакционные, то это не сработает. Установка свойства NServiceBus «IsTransactional» в false означает, что вы не можете работать с очередями без транзакций.

Попробуйте удалить очереди и заново создать их как транзакционные или, если вы используете бета-версию v2.0, просто позвольте NServiceBus создать очереди для вас.

+0

Означает ли это, что NService Bus не поддерживает очереди без транзакций? –

+1

Теперь мы предоставляем базовую поддержку в версии 3.x, но вы не получите такой же уровень надежности. В версии 4.0 мы будем округлять остальную часть этой истории. –