我有一个从各种 MSMQ 获取消息的 Windows 服务。该服务从队列中提取消息,然后根据消息来自的队列执行特定的工作流。是否可以将 WCF 服务配置为接受来自端点的消息并将其放入队列中?我希望服务有多个端点,并且根据接收消息的端点,消息将被放置在不同的队列中。我已经看到有关 netMsmqBinding 的信息,但到目前为止,我无法确定这是否适用于我正在考虑的用途。
任何帮助表示赞赏,
麦克风
我有一个从各种 MSMQ 获取消息的 Windows 服务。该服务从队列中提取消息,然后根据消息来自的队列执行特定的工作流。是否可以将 WCF 服务配置为接受来自端点的消息并将其放入队列中?我希望服务有多个端点,并且根据接收消息的端点,消息将被放置在不同的队列中。我已经看到有关 netMsmqBinding 的信息,但到目前为止,我无法确定这是否适用于我正在考虑的用途。
任何帮助表示赞赏,
麦克风
我得到这个正确吗 - 你想要
您绝对可以拥有一个 WCF 服务,它将向外部公开任意数量的端点,并将传入消息放入 MSMQ 队列。我只是不确定您是否能够在 WCF 服务方法中知道请求来自哪个端点......通常,WCF 服务类不知道请求来自哪里(并且通常不需要知道...)。
我看到了一些方法:
有多个服务,每个(类型)端点一个;他们可以共享所有代码和所有内容,但是如果您将其分成单独的服务类,那么每个服务类将固有地知道它所服务的端点,因此可以知道将信息放入哪个 MSMQ 队列
找到一种方法将一些标头信息与消息一起发送,以某种方式告诉您将消息放在哪里
在 WCF 4.0 中,您可能可以使用新的 WCF 路由服务来做一些事情......但是不太确定它是如何工作的 - 因为它还需要某种“提示”来知道它被调用的端点以及如何路由传入的消息
我能够做到这一点的方法是创建一个自定义的 ServiceHost 类,我可以将配置名称传递给它。这是使用服务实现类型名称来定位配置的默认实现的替代方案。这允许我在同一台机器上运行相同实现的多个实例。除此之外,在自定义服务类中,我添加了一个自定义 MessageInspector,它将自己附加到每个端点以侦听消息。然后,我使用 IDispatchMessageInspector.AfterReceiveRequest() 方法获取传入消息,然后将其放入我在配置中定义的队列中。有点复杂,但它非常适合我们的场景。
net.msmq 绑定允许 WCF 客户端直接写入 MSMQ 队列,即使读取队列的 WCF 服务不存在——它甚至不必存在。net.msmq 绑定还允许从队列中自动读取。不使用 MessageQueue 写入或读取队列。