【发布时间】:2010-09-08 14:17:58
【问题描述】:
有没有办法在 Asp.Net MVC 2 中使用 NServiceBus?我想从 Asp.Net MVC2 应用程序向服务发送请求消息,该服务处理消息并回复响应消息。有没有办法清楚地做到这一点?
【问题讨论】:
-
您的具体用例是什么?您能否提供更多有关您要完成的工作的详细信息,这样我就不必猜测了?
标签: c# asp.net-mvc-2 nservicebus
有没有办法在 Asp.Net MVC 2 中使用 NServiceBus?我想从 Asp.Net MVC2 应用程序向服务发送请求消息,该服务处理消息并回复响应消息。有没有办法清楚地做到这一点?
【问题讨论】:
标签: c# asp.net-mvc-2 nservicebus
NServiceBus 只支持注册状态码和整数的回调是有原因的。原因是您不应该将 NServiceBus 用于同步请求/响应式通信,这些场景最好使用 Wcf、NNibernate、EF、Ado.net 等框架来解决。
您应该只将 NSB 用于应用程序的异步部分,例如将“命令”发送到后端服务进行处理。
可以在这里找到深入的解释:
http://andreasohlund.net/2010/04/22/messaging-shouldnt-be-used-for-queries
如果您仍想使用 NSB 进行请求/响应,您将不得不为此工作 :) 使用消息处理程序来更新您的 MVC 应用程序中的某些缓存的响应。有了这些,您就可以进行一些 ajax 风格的轮询来确定数据何时到达。
希望这会有所帮助!
【讨论】:
如果您真的想要这样做,请按以下步骤操作:
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*/);
【讨论】:
如果这是一个新建项目,我强烈建议您考虑使用命令查询分离模式,它可以帮助您在逻辑上分离与业务域(命令)中的更改状态相关的关注点和仅充当状态描述机制的查询。然后可以使用 WCF 在 NServiceBus 和查询中实现命令。
【讨论】: