Nservicebus 中所有命令的单个 WCF 端点
single WCF endpoint for all commands in Nservicebus
我们正在尝试构建一个 Nservicebus 服务,该服务可以使用 WCF 与基于表单和 wpf 的客户端进行通信。我读到你可以从 WcfService 继承。
赞:
public class ThirdPartyWebSvc : WcfService<ThirdPartyCmd, ThirdPartyCmdResponse>
然后您只需在 app.config 中创建一个端点,您就可以像 here 中描述的那样完成操作。但问题是我必须为每个命令创建一个端点。
我希望有一个端点,除了任何命令和 returns 它的响应。
public class ThirdPartyWebSvc : WcfService<ICommand, IMessage>
有人能指出我正确的方向吗?我们无法使用 Nservicebus 进行客户端通信,我不想构建像服务器这样的代理,除非那是唯一的方法。
谢谢
据我所知,您想公开一个 WCF 服务操作,消费者可以调用该操作以多态方式将多个可能的命令之一传递给它,然后将该命令的服务路由到正确的 NServiceBus 端点然后处理命令。
首先,为了实现这一点,您应该忘记使用 NserviceBus.WcfService 基础 class,因为要使用它,您必须严格遵循您在 [=55] 中链接的文章中的指导=].
相反,您可以:
- 通过在操作定义中使用 ServiceKnownType 属性,添加所有可能的命令类型,设计您的服务操作契约以接受多态请求,
- 使用常规 System.ServiceModel.ServiceHost() 托管服务,然后在托管 WCF 服务的启动中配置 NserviceBus.IBus,并且
- 通过添加所有命令类型以及收件人队列地址,在您的服务配置文件中定义您的 UnicastBusConfig 配置部分
但是,您现在有以下缺点:
- 由于需要能够将 ICommand 的实现传递到服务中,因此每次需要添加新命令类型时都需要重新编译操作合约。
- 您将需要在配置文件中管理大量路由信息,如果任何接收端点发生变化,您将需要更改您的服务配置。
- 如果您的服务存在可用性问题,则不再向您的任何 NSB 端点发送消息。
- 如果您没有及时收到来自 NSB 端点的响应消息,您将需要编写代码来处理要执行的操作,并且此逻辑可能取决于发送的命令类型。
我希望您开始意识到集中此功能并不是一个好主意。
如果您能让您的客户端以标准方式向总线发送命令,那么上述所有问题都会消失,但如果没有 msmq,您怎么能这样做呢?
嗯,首先您可以考虑使用 other supported transports 之一。
如果 none 这些对您有用并且您必须使用 WCF 托管服务,那么您必须遵循 linked article 中的指导。本指南旨在引导您朝着正确的方向前进——多个 WCF 服务听起来很痛苦,直到您尝试将它们集中到一个服务中——然后痛苦会变得更大,而不是更少。
我们正在尝试构建一个 Nservicebus 服务,该服务可以使用 WCF 与基于表单和 wpf 的客户端进行通信。我读到你可以从 WcfService 继承。
赞:
public class ThirdPartyWebSvc : WcfService<ThirdPartyCmd, ThirdPartyCmdResponse>
然后您只需在 app.config 中创建一个端点,您就可以像 here 中描述的那样完成操作。但问题是我必须为每个命令创建一个端点。
我希望有一个端点,除了任何命令和 returns 它的响应。
public class ThirdPartyWebSvc : WcfService<ICommand, IMessage>
有人能指出我正确的方向吗?我们无法使用 Nservicebus 进行客户端通信,我不想构建像服务器这样的代理,除非那是唯一的方法。
谢谢
据我所知,您想公开一个 WCF 服务操作,消费者可以调用该操作以多态方式将多个可能的命令之一传递给它,然后将该命令的服务路由到正确的 NServiceBus 端点然后处理命令。
首先,为了实现这一点,您应该忘记使用 NserviceBus.WcfService 基础 class,因为要使用它,您必须严格遵循您在 [=55] 中链接的文章中的指导=].
相反,您可以:
- 通过在操作定义中使用 ServiceKnownType 属性,添加所有可能的命令类型,设计您的服务操作契约以接受多态请求,
- 使用常规 System.ServiceModel.ServiceHost() 托管服务,然后在托管 WCF 服务的启动中配置 NserviceBus.IBus,并且
- 通过添加所有命令类型以及收件人队列地址,在您的服务配置文件中定义您的 UnicastBusConfig 配置部分
但是,您现在有以下缺点:
- 由于需要能够将 ICommand 的实现传递到服务中,因此每次需要添加新命令类型时都需要重新编译操作合约。
- 您将需要在配置文件中管理大量路由信息,如果任何接收端点发生变化,您将需要更改您的服务配置。
- 如果您的服务存在可用性问题,则不再向您的任何 NSB 端点发送消息。
- 如果您没有及时收到来自 NSB 端点的响应消息,您将需要编写代码来处理要执行的操作,并且此逻辑可能取决于发送的命令类型。
我希望您开始意识到集中此功能并不是一个好主意。
如果您能让您的客户端以标准方式向总线发送命令,那么上述所有问题都会消失,但如果没有 msmq,您怎么能这样做呢?
嗯,首先您可以考虑使用 other supported transports 之一。
如果 none 这些对您有用并且您必须使用 WCF 托管服务,那么您必须遵循 linked article 中的指导。本指南旨在引导您朝着正确的方向前进——多个 WCF 服务听起来很痛苦,直到您尝试将它们集中到一个服务中——然后痛苦会变得更大,而不是更少。