Dot-Net

NServiceBus:找不到(消息)的元數據

  • September 16, 2016

我正在嘗試發布一條消息,如下所示

_bus.Publish(new BatchCompleted { BatchId = batch.Id});

並在 BatchCompletedHandler 中處理它:

public class BatchCompletedHandler: IHandleMessages<BatchCompleted>
{

   public void Handle(BatchCompleted message)
   {
         Do Some Stuff...
   }
}

每當我嘗試發布消息時,我都會收到以下 System.Exception:

找不到“MyAssembly.BatchCompleted”的元數據。消息需要實現“IMessage”、“IEvent”或“ICommand”。或者,如果您不想實現介面,您可以配置“Unobtrusive Mode Messages”並使用約定來配置消息的映射方式。

該消息確實實現了 IEvent,如下所示

[Serializable]
public class BatchCompleted : IEvent
{
   public int BatchId{ get; set; }
}

我正在使用以下程式碼配置 NSB

Configure.With(MyAssembly)

消息處理程序位於程序集 MyAssembly 中,消息位於 MyMessagesAssembly 中。

我究竟做錯了什麼?

NServiceBus 找不到正在使用的消息類型。消息位於單獨的程序集中,但配置導致 NSB 僅掃描指定的程序集 (MyAssembly),而不是掃描二進製文件夾中所有程序集的預設行為。

將配置更改為

Configure.With()

將掃描所有程序集並允許 NSB 找到所需的消息類型。

我認為錯誤資訊有點誤導!

在 NSB 5 中,您可以使用 AssembliesToScan 掃描所有程序集,如 NServiceBus 文件中所述:http: //docs.particular.net/nservicebus/hosting/assembly-scanning

如果您已指定命名空間約定,請確保所有規則都正確:

config.Conventions()
           .DefiningCommandsAs(t => t.Namespace != null && t.Namespace.StartsWith("..."))
           .DefiningEventsAs(t => t.Namespace != null && t.Namespace.StartsWith("..."))
           .DefiningMessagesAs(t => t.Namespace != null && t.Namespace.StartsWith("..."));

我希望這會有所幫助

引用自:https://stackoverflow.com/questions/18981020