【发布时间】:2022-01-22 22:06:06
【问题描述】:
我想让我的 API 既发布事件(在任何传入消息处理程序之外,例如来自操作方法)又订阅事件。发布活动有效。我使用旧版本的Program 和Startup 进行集成,使用GenericHost 和IMessageSession 成功注入到构造函数中。
但是,当激活注释掉的代码让API订阅和处理事件时,在初始化主机和运行应用程序时突然抛出了注入IMessageSession的异常。
TestController.cs
namespace TestContext
{
[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase/*, IHandleMessages<ReceivedEvent>*/
{
private IMessageSession _session;
public TestController(IMessageSession session)
{
_session = session;
}
/*
[NonAction]
public Task Handle(ReceivedEvent message, IMessageHandlerContext context)
{
throw new NotImplementedException();
}*/
[HttpPost]
public async Task<ActionResult> Test()
{
await _session.Publish(new PublishedEvent());
return Ok();
}
}
}
Program.cs
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseNServiceBus(context =>
{
var endpointConfiguration = new EndpointConfiguration("Test");
var transport = endpointConfiguration.UseTransport<LearningTransport>();
return endpointConfiguration;
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
例外
为什么会抛出异常以及如何让 API 订阅和处理事件?
编辑
从单独的服务类处理事件时,不会抛出异常。
public class HandlerService : IHandleMessages<ReceivedEvent>
{
public Task Handle(ReceivedEvent message, IMessageHandlerContext context)
{
Console.WriteLine(message);
return Task.CompletedTask;
}
}
【问题讨论】:
标签: asp.net-core-webapi nservicebus .net-6.0