Tom*_*son 5 .net messaging nservicebus publish-subscribe
我正在尝试发布如下所示的消息
_bus.Publish(new BatchCompleted { BatchId = batch.Id});
Run Code Online (Sandbox Code Playgroud)
并在BatchCompletedHandler中处理它:
public class BatchCompletedHandler: IHandleMessages<BatchCompleted>
{
public void Handle(BatchCompleted message)
{
Do Some Stuff...
}
}
Run Code Online (Sandbox Code Playgroud)
每当我尝试发布消息时,我都会收到以下System.Exception:
找不到'MyAssembly.BatchCompleted'的元数据.消息需要实现"IMessage","IEvent"或"ICommand".或者,如果您不想实现接口,则可以配置"Unobtrusive Mode Messages"并使用约定来配置消息的映射方式.
该消息确实实现了IEvent,如下所示
[Serializable]
public class BatchCompleted : IEvent
{
public int BatchId{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下代码配置NSB
Configure.With(MyAssembly)
Run Code Online (Sandbox Code Playgroud)
消息处理程序位于程序集MyAssembly中,消息位于MyMessagesAssembly中.
我究竟做错了什么?
NServiceBus找不到正在使用的消息类型.消息位于单独的程序集中,但配置会导致NSB仅扫描指定的程序集(MyAssembly),而不是扫描二进制文件夹中所有程序集的默认行为.
将配置更改为
Configure.With()
Run Code Online (Sandbox Code Playgroud)
将扫描所有程序集并允许NSB查找所需的消息类型.
我认为错误信息有点误导!
在 NSB 5 中,您可以使用 AssembliesToScan 扫描所有程序集,如 NServiceBus 文档中所述: http ://docs.pspecial.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("..."));
Run Code Online (Sandbox Code Playgroud)
我希望这会有所帮助
| 归档时间: |
|
| 查看次数: |
5170 次 |
| 最近记录: |