2010-12-21 47 views
1

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

任何帮助表示赞赏,

迈克

回答

0

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

1

我是否正确地得到这个 - 你想

  • 暴露给外界一个WCF服务中使用多个终结
  • 取决于有哪个端点消息进入WCF服务,它应该将这些消息放入单独的MSMQ队列中?

您肯定可以拥有一个WCF服务,可以将任意数量的端点暴露给外部,并将传入的消息放入MSMQ队列中。我只是不确定你是否能够在WCF服务方法内部知道请求来自哪个端点.....通常,WCF服务类不知道请求来自何处(以及通常不需要知道......)。

我看到了几个方法可供选择:

  • 有多个服务,每一个(类型)的端点;它们可以共享其所有代码和一切,但如果你单独到这个单独的服务类,那么每个服务类将固有知道它提供什么端点,从而可以知道什么MSMQ队列把信息变成

  • 找到一种方式发送一些头信息,以及消息,不知何故把WCF 4.0中的消息放在哪里,你可能可以用新的WCF路由服务做些什么......不太确定然而,这将如何工作 - 因为它也需要某种“提示”来知道它被呼叫的端点以及如何路由传入的消息

0

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