Вопрос

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

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

Когда интересующее меня действие происходит в приложении, которое я запускаю

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

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

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

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 ИНФОРМАЦИЯ NServiceBus.Unicast.UnicastBus Worker.15 - работник инициализирован. DEBUG NServiceBus.Unicast.UnicastBus Worker.15 - Вызов «HandleEndMessage» для NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule DEBUG NServiceBus.Unicast.UnicastBus 9 - Отправка сообщения . 734e2fdd726d \ 8267 до целевого работника2.

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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top