我已经阅读了为什么不从 Web 应用程序发布 NServiceBus 消息和另一个类似的问题,但我不清楚这是否也适用于服务层。例如,如果服务层由使用 WCF 或 Web API 或任何其他方式构建的 Web 服务或 REST 服务组成,这些服务是否应该发布事件或发送命令?如果这些服务托管在负载平衡的 Web 服务器中,那么文章中概述的问题也适用于这一层。建议将如何改变或不改变?
如果我从事件与命令的定义来看,我所说的消息是事件,例如“创建了一个用户”,因此应该发布一个事件。事实上,创建用户的服务甚至不知道还能做什么,即可能是另一个应用程序应该为它创建一个定制的门户,而另一个应用程序应该向用户发送一个欢迎工具包。这将是一个事件,而不是一个命令。当应用程序服务本身由一个或多个 Web 应用程序组成时,我想我对 Web 应用程序和应用程序服务的定义很感兴趣。
Web应用程序的定义
Web 应用程序是用户通过网络(例如 Internet 或 Intranet)访问的应用程序。
但是,对我来说,用户可以是计算机,因此 Web 服务是 Web 应用程序,这就是这个问题的原因。
编辑:
让我们考虑一个具体的例子。ASP.NET 网站(MVC 或 Web 表单 - 无关紧要)向操作员显示表单,获取包含用户创建数据(名称、用户名、密码)的帖子,并调用 WCF 服务来创建用户。在网站和 WCF 服务之间,我们可以放置 ServiceBus 并发送命令来创建用户(请求/响应),以便我们获得第一篇文章中描述的所有好处。WCF 服务是实际的业务处理层,即它会创建用户。这就是我的问题所在。创建用户后,它应该宣布一个用户已经被创建并且其他系统可以对它做出反应并做他们应该做的任何事情。所以它非常适合发布消息的模式。然而,WCF 服务本身是一个 Web 应用程序,因此具有 Web 应用程序的大部分特征,因此造成了混乱。