2016-02-26 35 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

對於其他社區的好處,你會擴展你的修復或刪除問題嗎? –