具有优先级的WCF端点

时间:2008-10-08 16:01:40

标签: wcf endpoint

我需要具有3个端点的WCF服务

  1. 正常
  2. 大多数消息都来自正常和低端点。 如果出现Message on High,则必须尽快处理。

    有谁知道怎么做???

4 个答案:

答案 0 :(得分:4)

你应该看看MSDN杂志中的Michele Leroux Bustamante这个伟大的两部分系列:

Building a WCF Router, Part 1Building a WCF Router, Part 2

第1部分,特别是你会感兴趣:

  

有时引入一个很有用   中介或路由器之间的服务   客户端和目标服务   接收在其间流动的消息   他们并执行其他活动   例如记录, 优先路由 ,   在线/离线路由,加载   平衡,或引入安全性   边界。当这样的中间体   服务介绍,它成为   需要调整一些寻址和   消息过滤行为   容纳。

[我的重点补充]

她的source code也提供相关的blog

答案 1 :(得分:2)

为什么不运行两个单独的端点进程,一个用于低/正常,另一个用于高。如果你有容量,你甚至可以在单独的(更好的?)硬件上找到它。否则,如果你必须在一个过程中完成,那么优先级队列在我看来你需要什么。

答案 2 :(得分:1)

我能想到的最简单的方法是将服务部署两次:一个使用低/中端点,然后是一个完全不同的高端点实例。正如Endian在他的回答(我投票给BTW)中说的那样,你可以将它们分开,但你也可以让它们运行 在同一个盒子上你是两个使用不同端口的实例。如果我不得不这样做(或者真的推动),这就是我的方式。

你是另一个(没有吸引力的)选项是创建一个自定义通道,它能够操纵消息并将它们放在一个单独的“VIP”行中,以及一个相应的操作行为,可以从“VIP”行拉出服务操作已准备好接收消息。这并没有真正为您购买任何东西,因为您所做的只是确保您的服务在一组“服务实例”中运行。我猜你在这种情况下这并没有给你带来太大的好处。

停止和重新启动服务是一个更高优先级的请求,有龙。如果可能的话我会避免它。如果没有,您可能需要考虑将服务创建为WF工作流并使用其中一些流程启动/停止功能,但您仍需要一些自定义渠道和一些自定义行为才能使其发挥作用。此时,您可能想要考虑BizTalk。

答案 3 :(得分:-2)

我想你必须自己实施这个优先权。

如果有高优先级,你必须停止其他一切(保存其状态或其他东西)并开始做任何需要做的事情。

只是一个想法