Dot-Net
NServiceBus:找不到(消息)的元數據
我正在嘗試發布一條消息,如下所示
_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("..."));我希望這會有所幫助