1

我有一个从各种 MSMQ 获取消息的 Windows 服务。该服务从队列中提取消息,然后根据消息来自的队列执行特定的工作流。是否可以将 WCF 服务配置为接受来自端点的消息并将其放入队列中?我希望服务有多个端点,并且根据接收消息的端点,消息将被放置在不同的队列中。我已经看到有关 netMsmqBinding 的信息,但到目前为止,我无法确定这是否适用于我正在考虑的用途。

任何帮助表示赞赏,

麦克风

4

3 回答 3

1

我得到这个正确吗 - 你想要

  • 使用多个端点向外界公开的 WCF 服务
  • 根据消息进入 WCF 服务的端点,它应该将这些消息放入单独的 MSMQ 队列中吗?

您绝对可以拥有一个 WCF 服务,它将向外部公开任意数量的端点,并将传入消息放入 MSMQ 队列。我只是不确定您是否能够在 WCF 服务方法中知道请求来自哪个端点......通常,WCF 服务类不知道请求来自哪里(并且通常不需要知道...)。

我看到了一些方法:

  • 有多个服务,每个(类型)端点一个;他们可以共享所有代码和所有内容,但是如果您将其分成单独的服务类,那么每个服务类将固有地知道它所服务的端点,因此可以知道将信息放入哪个 MSMQ 队列

  • 找到一种方法将一些标头信息与消息一起发送,以某种方式告诉您将消息放在哪里

  • 在 WCF 4.0 中,您可能可以使用新的 WCF 路由服务来做一些事情......但是不太确定它是如何工作的 - 因为它还需要某种“提示”来知道它被调用的端点以及如何路由传入的消息

于 2010-12-21T21:53:37.200 回答
0

我能够做到这一点的方法是创建一个自定义的 ServiceHost 类,我可以将配置名称传递给它。这是使用服务实现类型名称来定位配置的默认实现的替代方案。这允许我在同一台机器上运行相同实现的多个实例。除此之外,在自定义服务类中,我添加了一个自定义 MessageInspector,它将自己附加到每个端点以侦听消息。然后,我使用 IDispatchMessageInspector.AfterReceiveRequest() 方法获取传入消息,然后将其放入我在配置中定义的队列中。有点复杂,但它非常适合我们的场景。

于 2010-12-29T20:27:38.287 回答
0

net.msmq 绑定允许 WCF 客户端直接写入 MSMQ 队列,即使读取队列的 WCF 服务不存在——它甚至不必存在。net.msmq 绑定还允许从队列中自动读取。不使用 MessageQueue 写入或读取队列。

于 2011-02-28T20:03:50.353 回答