Web applications 在Web应用程序中使用NServiceBus

Web applications 在Web应用程序中使用NServiceBus,web-applications,nservicebus,Web Applications,Nservicebus,还有一个问题。Udi回复说,如果我们真的想这样做,可以使用以下方法 var sync = Bus.Send<SomeMessage>(/*data*/) .Register((AsyncCallback)delegate(IAsyncResult ar) { var result = ar.AsyncState as CompletionResult

还有一个问题。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*/);
var sync=Bus.Send(/*data*/)
.Register((异步回调)委托(IAsyncResult ar)
{
var result=ar.asynchState作为CompletionResult;
//对result.Messages执行一些操作
},
无效的
);
sync.AsyncWaitHandle.WaitOne(/*超时*/);
这将在windows应用程序中完美工作,因为只有一个用户

我想知道这在web应用程序中是如何工作的;由于存在多个线程(用于多个用户会话),因此调用Bus.Send并等待回调。只有一个回复队列(如果我的理解正确的话)

NServiceBus是否知道根据从队列接收到的响应消息恢复哪个线程

如果我的理解是正确的,则不建议在此类场景中使用消息传递(从web应用程序向服务发送请求消息,服务处理消息并使用响应消息进行回复)

例如,如果要执行诸如GetCustomersByRegionRequest和CustomersByRegionResponse之类的查询,则不应使用消息传递来实现
-

NSB通过维护回调及其相关消息的字典,在内部将这一切保持在一起。这些消息具有用于执行查找的关联id。您是对的,在请求/响应场景中使用消息确实会破坏消息传递的目的。主要目的是不阻塞,其中请求/响应本质上是阻塞模式。请看上面帖子中Andreas的回复,这是一个很好的解释