【问题标题】:single WCF endpoint for all commands in NservicebusNservicebus 中所有命令的单个 WCF 端点
【发布时间】:2015-08-06 12:10:43
【问题描述】:

我们正在尝试构建一个 Nservicebus 服务,该服务可以使用 WCF 与基于表单和 wpf 的客户端进行通信。我读过你可以从 WcfService 继承。

喜欢:

 public class ThirdPartyWebSvc : WcfService<ThirdPartyCmd, ThirdPartyCmdResponse>

然后,您只需在 app.config 中创建一个端点,就可以按照here 的描述完成。但问题是我必须为每个命令创建一个端点。

我希望有一个端点,除了任何命令并返回其响应。

public class ThirdPartyWebSvc : WcfService<ICommand, IMessage>

有人能指出我正确的方向吗?我们无法使用 Nservicebus 进行客户端通信,我不想构建像服务器这样的代理,除非这是唯一的方法。

谢谢

【问题讨论】:

  • 我想要一个端点,除了任何命令并返回它的响应 - 你为什么想要这个?
  • 仅供内部使用,不提供外部服务。我们在客户端安装 msmq 时遇到问题。在 Nservicebus 的书中,我们读到对于像表单客户端这样的客户端,您可以(更好?)使用 wcf。此外,我们正在处理许多遗留系统,我认为在新版本完成之前使用 wcf 会更容易。
  • 不,我不是说您为什么要将 NSB 端点公开为 WCF 服务,我的意思是您为什么要通过 单个 WCF 公开您的 NSB 端点服务?
  • 对不起,我看错了。因为我不想为每个 NSB 端点设置多个 WCF 端点。就像在特定网站上的示例一样,它公开了一个 NSB 端点“CancelOrder”,但我们有许多 NSB 端点,还会添加更多。我希望客户端只需将命令发送到 WCF,然后将其发送到 Nservicebus。 WCF 不应该关心任何事情,只需将其发送到 Nservicebus。
  • 您的意思是多态地对用户根据请求发送的任何内容执行 Bus.Send() ?总线如何知道将消息发送到哪个端点?

标签: wcf nservicebus


【解决方案1】:

因此,据我所知,您希望公开一个 WCF 服务操作,消费者可以调用该操作以多态地将多个可能的命令之一传递给,然后将该命令的服务路由到正确的 NServiceBus 端点,然后由该端点处理命令。

首先,为了实现这一点,您应该忘记使用 NserviceBus.WcfService 基类,因为要使用它,您必须严格遵循您在帖子中链接的文章中的指导。

相反,您可以

  1. 通过在操作定义中使用ServiceKnownType 属性来设计您的服务操作合同以接受多态请求,并添加所有可能的命令类型,
  2. 使用常规 System.ServiceModel.ServiceHost() 托管服务,然后在您托管的 WCF 服务的启动中配置 NserviceBus.IBus,然后
  3. 通过添加所有命令类型以及收件人队列地址,在您的服务配置文件中定义您的 UnicastBusConfig 配置部分

但是,您现在有以下缺点:

  • 由于需要能够将 ICommand 的实现传递到服务中,因此每次需要添加新的命令类型时都需要重新编译操作合约。
  • 您将需要在配置文件中管理大量路由信息,如果任何接收端点发生更改,您将需要更改您的服务配置。
  • 如果您的服务存在可用性问题,则不再向您的任何 NSB 端点发送消息。
  • 如果您没有及时收到来自 NSB 端点的响应消息,您将需要编写代码来处理该怎么做,此逻辑​​可能取决于发送的命令类型。

我希望您开始看到集中化此功能并不是一个好主意。

如果您可以让您的客户以标准方式向总线发送命令,那么上述所有问题都会消失,但是如果没有 msmq,您怎么能做到呢?

好吧,首先您可以考虑使用other supported transports 之一。

如果这些都不适合您并且您必须使用 WCF 托管服务,那么您必须遵循 linked article 中的指导。本指南旨在引导您朝着正确的方向前进 - 多个 WCF 服务听起来很痛苦,直到您尝试将它们集中到一个服务中 - 然后痛苦变得更大,而不是更少。

【讨论】:

  • 感谢您的详细回答并花时间理解,希望我能给您更多积分。我会用 po 再看看我们的设计。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 2021-08-22
相关资源
最近更新 更多