Web API CurrentMessageContext Null

时间:2013-02-10 00:22:24

标签: nservicebus

我在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

2 个答案:

答案 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());
    }