NES-команда не отправляется в CommandHandler

Мой класс команд выглядит следующим образом:

public class RegisterToConference : ICommand
    {
        public RegisterToConference()
        {
            this.Id = Guid.NewGuid();
            this.Seats = new Collection<SeatQuantity>();
        }

        public Guid Id { get; set; }

        public Guid OrderId { get; set; }

        public Guid ConferenceId { get; set; }

        public ICollection<SeatQuantity> Seats { get; set; }          
    }

Мой класс обработчика команд выглядит следующим образом:

public class OrderCommandHandler :
        IHandleMessages<RegisterToConference>
    {
        private readonly IRepository repository;
        private readonly IPricingService pricingService;

        public OrderCommandHandler(IRepository repository, IPricingService pricingService)
        {
            this.repository = repository;
            this.pricingService = pricingService;
        }

        public void Handle(RegisterToConference command)
        {
            var items = command.Seats.Select(t => new OrderItem(t.SeatType, t.Quantity)).ToList();
            var order = repository.Get<Registration.Order>(command.OrderId);
            if (order == null)
            {
                order = new Registration.Order(command.OrderId, command.ConferenceId, items, pricingService);
            }
            else
            {
                order.UpdateSeats(items, pricingService);
            }

            repository.Add<Registration.Order>(order);
        }

    }

Я отправляю команду на шину из метода действия моего контроллера следующим образом:

this.commandBus.Send(command);

Конфигурация конечной точки выглядит следующим образом:

public class EndpointConfig : IConfigureThisEndpoint, AsA_Server, IWantToRunWhenBusStartsAndStops, IWantToRunWhenConfigurationIsComplete
    {
        public void Init()
        {
            LogManager.Use<Log4NetFactory>();
        }

        public void Start()
        {
            Wireup.Init()
                .UsingInMemoryPersistence()
                .EnlistInAmbientTransaction()
                .NES()
                .Build();
        }

        public void Stop()
        {
        }

        public void Customize(BusConfiguration configuration)
        {
            configuration.UseSerialization<Json>();
            configuration.EnableInstallers();
            configuration.UsePersistence<InMemoryPersistence>();
            configuration.UseTransport<MsmqTransport>();
            configuration.PurgeOnStartup(false);
            configuration.RegisterComponents(c =>
            {
                c.ConfigureComponent<Repository>(DependencyLifecycle.InstancePerUnitOfWork);

                });
        }

        public void Run(Configure config)
        {
            config.NES();
        }
    }

Внутри Web.config я настроил следующее:

<configSections>
       <section name="TransportConfig" type="NServiceBus.Config.TransportConfig, NServiceBus.Core" />
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
    <section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
   </configSections>

 <TransportConfig MaxRetries="5" MaximumConcurrencyLevel="1" MaximumMessageThroughputPerSecond="0" />
  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="Registration" Endpoint="Registration" />
    </MessageEndpointMappings>
  </UnicastBusConfig>
  <MessageForwardingInCaseOfFaultConfig ErrorQueue="RegistrationEndPoint.Errors" />

Внутри Global.asax.cs я зарегистрировал ISendOnlyBus следующим образом:

public static ISendOnlyBus Bus { get; private set; }
        private void RegisterBus()
        {
            var busConfiguration = new BusConfiguration();
            busConfiguration.UseSerialization<JsonSerializer>();
            busConfiguration.UseTransport<MsmqTransport>();
            busConfiguration.Transactions().Disable();
            busConfiguration.PurgeOnStartup(false);

            LogManager.Use<NServiceBus.Log4Net.Log4NetFactory>();

            Bus = NServiceBus.Bus.CreateSendOnly(busConfiguration);
        }

Когда я нажимаю кнопку, чтобы отправить команду обработчику команд, она не работает.

Я использую фреймворк NES.CQRS.


person Mojammel Haque    schedule 26.02.2016    source источник
comment
Вы запустили шину в своем Global.asax.cs? У вас есть что-нибудь в логах? у вас есть сообщения в очередях?   -  person Sean Farmar    schedule 29.02.2016


Ответы (1)


Решил проблему. У меня была проблема с внедрением зависимостей, и я проигнорировал ее, когда пострадал. Теперь я исправил проблему с ioc, и теперь она работает нормально.

person Mojammel Haque    schedule 01.03.2016
comment
Для остальной части сообщества, не могли бы вы либо рассказать о том, что вы сделали, чтобы исправить это, либо удалить вопрос? - person Justin Self; 03.03.2016