2013-02-10 2 views
1

У меня есть следующий метод в контроллере апиWeb API CurrentMessageContext Null

[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 здесь нулевая. Я следую примеру Request/Response. Единственное отличие здесь - это асинхронный шаблон с использованием Task.

Спасибо, Marinko

+0

Что вы пытаетесь получить в контекст сообщения? –

+0

Заголовки, установленные перед ответом, были отправлены –

+0

Что произойдет, если вы не используете Task? –

ответ

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 внутри обратного вызова. Я думаю, что проблема связана с потоками. Рабочий поток не такой же, как поток обратного вызова, но я не уверен. –

2

Обратный вызов запускается в другом потоке, и поскольку Bus.CurrentMessageContext использует атрибут ThreadStatic, значение имеет значение null при доступе из другого потока.

+0

У меня были такие проблемы, и я пришел к тому же выводу, что и вы. Есть ли у вас предложение исправить это? Я могу только думать об удалении всего асинхронного материала или ждать NSB 6. –

Смежные вопросы