1

我在 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 在这里为空。我正在关注请求/响应示例。这里唯一的区别是使用 Task 的异步模式。

谢谢, 马林科

4

2 回答 2

2

回调正在另一个线程中触发,并且由于Bus.CurrentMessageContext使用ThreadStatic属性,如果从不同的线程访问,则值为 null。

于 2013-02-13T02:30:15.120 回答
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());
    }
于 2013-02-10T14:14:46.120 回答