ASP上的NServiceBus.NET 5无法在非显眼模式下找到事件元数据

本文关键字:模式 元数据 事件 NET NServiceBus 上的 ASP | 更新日期: 2023-09-27 18:12:33

我试图在ASP中使用NServiceBus。NET 5 Web应用程序。当调用IBus.Send(purchaseTransactionAddedEvent)时,其中purchaseTransactionAddedEvent是在另一个称为Infrastructure的程序集中定义的purchaseTransactionAddedEvent类型。合同,我得到这个错误:

消息=找不到元数据"Infrastructure.Contract.Events.PurchaseTransactionAddedEvent"。请确保以下内容:1. "Infrastructure.Contract.Events。PurchaseTransactionAddedEvent'包含在初始扫描中。2. "Infrastructure.Contract.Events。PurchaseTransactionAddedEvent'实现'IMessage', ' event '或' iccommand ',或者,如果你不想实现一个接口,你可以使用"Unobtrusive"模式"。= NServiceBus来源。核心

在配置端点时,我使用的是不显眼模式,如下所示:

            busConfiguration.UseTransport<AzureServiceBusTransport>();
            // we are using In memory persistence for messages
            busConfiguration.UsePersistence<InMemoryPersistence>();
            // NOTE: this is important and has to be set on publisher and subscriber endpoints.
            // We are using unobstrusive mode, so our messages/events do not have to implement IMessage, IEvent, etc
            var conventionsBuilder = busConfiguration.Conventions();
            conventionsBuilder.DefiningEventsAs(t => t.Namespace != null && t.Namespace == "Infrastructure.Contract.Events");

但是这似乎不能在新的ASP中工作。. NET 5文件夹安排。

日志已经在NServiceBus上启用,但它没有告诉我它正在扫描什么程序集。考虑到ASP。. NET 5不再有bin文件夹,如何解决这个问题?

ASP上的NServiceBus.NET 5无法在非显眼模式下找到事件元数据

总线。Send正在查找命令,而不是事件。事件通过Bus.Publish发布。但是你不应该从网站发送/发布事件。首先向处理程序发送命令,并让处理程序发布事件。查看这篇文章了解更多信息。

试试这个

var configuration = new BusConfiguration();
configuration.UseSerialization<JsonSerializer>();
configuration.UseContainer<AutofacBuilder>(x => x.ExistingLifetimeScope(container));
ConventionsBuilder conventions = configuration.Conventions();
conventions.DefiningCommandsAs(t => t.Namespace != null && t.Namespace.StartsWith("Infrastructure.Contract") && t.Namespace.EndsWith("Commands"));
Bus = NServiceBus.Bus.CreateSendOnly(configuration);

然后通过Bus.Send(myCommand)发送命令