Nservicebus Web API CurrentMessageContext Null
我在api控制器中有以下方法Nservicebus Web API CurrentMessageContext Null,nservicebus,Nservicebus,我在api控制器中有以下方法 [System.Web.Mvc.HttpPost] public Task<CommandResponse> Send(CommandBase command) { var result = new TaskCompletionSource<CommandResponse>(); this.Bus.Send(command).Register<int>(response => {
[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;
}
[System.Web.Mvc.HttpPost]
公共任务发送(CommandBase命令)
{
var result=new TaskCompletionSource();
this.Bus.Send(命令).Register(响应=>
{
this.Bus.CurrentMessageContext在此为null与AsyncPagesMVC3示例中一样,您必须显式调用安装函数,请参阅Global.asax.cs中应用程序启动()方法的最后一行:
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());
}
受保护的无效应用程序\u Start()
{
RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
注册地址(RouteTable.Routes);
//N服务总线配置
Configure.WithWeb()
.DefaultBuilder()
.ForMvc()
.JsonSerializer()
.Log4Net()
.MsmqTransport()
.IsTransactional(错误)
.PurgeOnStartup(正确)
.UnicastBus()
.ImpersonateSender(错误)
.CreateBus()
.Start(()=>Configure.Instance.ForInstallationOn().Install());
}
回调正在另一个线程中启动,因为总线。CurrentMessageContext
使用ThreadStatic
属性,如果从其他线程访问,则该值为null。您试图在消息上下文中访问的是什么?发送响应之前设置的头如果不使用任务会发生什么?callback按预期执行。安装方法没有帮助。我想访问回调中的this.Bus.CurrentMessageContext.Headers。我认为问题与线程有关。工作线程与回调线程不同,但我不确定。我遇到了此类问题,得出了与回调线程相同的结论你。你有什么建议来解决这个问题吗?我只能考虑删除所有的异步内容,或者等待NSB 6。