我在api控制器中有以下方法
[System.Web.Mvc.HttpPost]
public Task<CommandResponse> Send(CommandBase command)
{
var result = new TaskCompletionSource<CommandResponse>();
this.Bus.Send(command).Register<int>(response =>
{
this.Bus.CurrentMessageContext is here null <-------
result.TrySetResult(commandResponse);
});
return result.Task;
}
知道为什么CurrentMessageContext在这里为null。我跟随请求/响应示例。这里唯一的区别是使用Task的异步模式。
谢谢, Marinko
答案 0 :(得分:2)
回调是在另一个线程中触发的,因为Bus.CurrentMessageContext
使用ThreadStatic
属性,如果从另一个线程访问,则该值为null。
答案 1 :(得分:0)
与在AsyncPagesMVC3示例中一样,您必须显式调用Install函数,请参阅Global.asax.cs中Application_Start()方法的最后一行:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
// NServiceBus configuration
Configure.WithWeb()
.DefaultBuilder()
.ForMvc()
.JsonSerializer()
.Log4Net()
.MsmqTransport()
.IsTransactional(false)
.PurgeOnStartup(true)
.UnicastBus()
.ImpersonateSender(false)
.CreateBus()
.Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());
}