使用MassTransit的ASP.NET旧版应用程序在第二次尝试时无法发送消息



我有一个ASP.NET 4.7.2应用程序,目前还无法迁移到新的.NET版本。

现在我们使用的是Masstransit 6.3.2。

结果是,我们在我的Global.asax.cs:中创建了一个这样的总线

busControl = Bus.Factory.CreateUsingRabbitMq((cfg) => 
{
cfg.Host(_settings.Host, _settings.VirtualHost, hfg =>
{
hfg.Password(_settings.Password);
hfg.Username(_settings.UserName);
});
});
container.RegisterInstance<IBusControl>(busControl);
container.RegisterInstance<IBus>(busControl);

总线被传递到容器(IUnityContainer(并注入控制器:

[RoutePrefix("api/Message")]
public class MessageController : ApiController
{
private readonly IBus bus;
public MessageController(IBus bus)
{
this.bus = bus;
}
[HttpPost()]
[ResponseType(typeof(void))]
[Route(nameof(SendTestMessage))]
public async Task<IHttpActionResult> SendTestMessage(TestMessage message)
{
if (message == null)
return BadRequest();
try
{
var endpoint = await bus.GetSendEndpoint(new Uri("exchange:testQueue"));
await endpoint.Send(message);
return Ok();
}
catch (Exception ex)
{
Logger.Fatal(ex, "HttpRequest {requestname} failed", nameof(SendTestMessage));
return StatusCode(HttpStatusCode.InternalServerError);
}
}
}

第一次调用该操作时,一切正常,并将消息传递到RabbitMq队列。在第二次尝试时,它失败,并出现异常。

该异常不存在堆栈争用。异常的来源是System.Web

System.NullReferenceException
HResult=0x80004003
Message=对象引用未设置为对象实例
此异常最初是在以下调用堆栈引发的:
System.Web.ThreadContext.AssociateWithCurrentThread(bool(

所以修复非常容易。

我刚换了

var endpoint = await bus.GetSendEndpoint(new Uri("exchange:testQueue"));

var endpoint = await bus.GetSendEndpoint(new Uri("exchange:testQueue")).ConfigureAwait(false);

相关内容

  • 没有找到相关文章

最新更新