2013-02-10 57 views
1

,我有以下方法在API控制器的Web API CurrentMessageContext空

[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的異步模式。

感謝, Marinko

+0

你試圖在消息上下文中訪問什麼? – 2013-02-10 20:26:01

+0

發送響應之前設置的標頭 – 2013-02-11 21:39:50

+0

如果您不使用任務,會發生什麼情況? – 2013-02-11 23:59:25

回答

0

由於AsyncPagesMVC3樣品中,你必須明確地調用安裝功能,請參閱在的Application_Start()方法的最後一行從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()); 
    } 
+0

回調按預期執行。安裝方法沒有幫助。我想訪問回調中的this.Bus.CurrentMessageContext.Headers。我認爲這個問題與線程有關。工作線程與回調線程不一樣,但我不確定。 – 2013-02-12 08:02:46

2

回調在另一個線程中被觸發,因爲Bus.CurrentMessageContext使用ThreadStatic屬性,如果從不同的線程訪問,該值爲空。

+0

我遇到了這樣的問題,我得到了和你一樣的結論。你有什麼建議來解決這個問題嗎?我只能想到移除所有異步內容或等待NSB 6。 – 2016-02-02 15:40:56