【问题标题】:NES- Command doesn't send to CommandHandlerNES- 命令不发送到 CommandHandler
【发布时间】:2016-02-26 14:11:15
【问题描述】:

我的命令类如下:

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

我的Command Handler类如下:

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

Endpoint配置如下:

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 框架。

【问题讨论】:

  • 您是否在 Global.asax.cs 中启动了总线?你有什么日志吗?队列中有消息吗?

标签: nservicebus cqrs neventstore


【解决方案1】:

解决了这个问题。我在依赖注入方面遇到了一些问题,当我遭受痛苦时我忽略了它。现在我修复了ioc问题,现在可以正常工作了。

【讨论】:

  • 为了社区的其他利益,您会扩展您为解决问题所做的工作还是删除问题?
猜你喜欢
  • 2019-08-28
  • 1970-01-01
  • 2016-04-06
  • 2015-03-05
  • 1970-01-01
  • 2023-01-18
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
相关资源
最近更新 更多