Nservicebus

时间:2015-08-06 12:10:43

标签: wcf nservicebus

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

像:

 public class ThirdPartyWebSvc : WcfService<ThirdPartyCmd, ThirdPartyCmdResponse>

然后你可以在app.config中简单地创建一个端点,就像描述here一样。但问题是我必须为每个命令创建一个端点。

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

public class ThirdPartyWebSvc : WcfService<ICommand, IMessage>

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

由于

1 个答案:

答案 0 :(得分:2)

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

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

相反,你可以

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

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

    我希望你们开始看到如何集中这个功能并不是一个好主意。

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

    嗯,首先你可以看一下other supported transports中的一个。

    如果这些都不适合您并且您必须使用WCF托管服务,那么您必须遵循linked article中的指导。这个指导是为了引导你走向正确的方向 - 多个WCF服务听起来像一个痛苦,直到你试图将它们集中到一个服务 - 然后痛苦变得更大,而不是更少。