2016-02-26 80 views
2

我的命令类如下: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框架。

+0

您是否在Global.asax.cs中启动了总线?日志中有什么东西吗?队列中有任何消息吗? –

回答

-3

解决了这个问题。我有一些问题被认为是依赖注入,当我受到影响时我忽略了它。现在我修复了ioc问题,现在它工作正常。

+2

对于其他社区的好处,你会扩展你的修复或删除问题吗? –