Еще один вопрос по Использование NServiceBus с потоком Asp.Net MVC 2 .Udi ответил, что следующий метод может быть использован, если мы действительно хотим это сделать.
var sync = Bus.Send<SomeMessage>(/*data*/)
.Register((AsyncCallback)delegate(IAsyncResult ar)
{
var result = ar.AsyncState as CompletionResult;
// do something with result.Messages
},
null
);
sync.AsyncWaitHandle.WaitOne( /*timeout*/);
Это будет отлично работать в приложении Windows, потому что есть только один пользователь.
Интереснокак это будет работать в веб-приложении;поскольку существует несколько потоков (для нескольких пользовательских сеансов), вызов Bus.Send и ожидание обратного вызова.Будет только одна очередь ответов (если я правильно понимаю).
Знает ли NServiceBus, какой поток возобновить, основываясь на ответном сообщении, которое он получил из очереди?
Если я правильно понимаю, не рекомендуется использовать обмен сообщениями для подобных сценариев (отправить запрос)сообщение из веб-приложения в службу, которая обрабатывает сообщение и отвечает сообщением с ответом)
«Например, если вы хотите выполнять запросы, такие как GetCustomersByRegionRequest и CustomersByRegionResponse, которые не должны реализовываться с помощью обмена сообщениями».- http://docs.particular.net/