3

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

  1. 高的
  2. 普通的
  3. 低的

大多数消息将通过正常和低端点。如果出现高消息,则必须尽快处理。

有谁知道怎么做???

4

4 回答 4

4

您应该看一下 MSDN 杂志上 Michele Leroux Bustamante 的这个伟大的两部分系列:

构建 WCF 路由器,第 1 部分构建 WCF 路由器,第 2 部分

尤其是第 1 部分,您会很感兴趣:

有时在客户端和目标服务之间引入中介或路由器服务以接收在它们之间流动的消息并执行其他活动(例如日志记录、优先级路由、在线/离线路由、负载平衡)或引入安全边界很有用. 当引入这样的中间服务时,有必要调整一些寻址和消息过滤行为以适应。

[我的重点补充]

她的博客上也有相关的源代码

于 2008-10-09T19:07:59.507 回答
2

为什么不运行两个单独的端点进程,一个用于低/正常,一个用于高。如果你有能力,你甚至可以将它放在单独的(更好的?)硬件上。否则,如果您必须在单个进程中执行此操作,那么在我看来,优先队列似乎是您所需要的。

于 2008-10-08T16:17:24.327 回答
1

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

您的另一个(不吸引人的)选项是创建一个能够处理消息并将它们放在单独的“VIP”行中的自定义通道,以及可以在服务操作时从“VIP”行中提取的相应操作行为已准备好接收消息。与第一个选项相比,这并没有真正为您买任何东西,因为您所做的只是确保您的服务在一个“集合”服务实例中运行。我猜在你的情况下,这对你没什么好处。

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

于 2008-10-08T16:46:58.980 回答
-2

我想您必须自己实现该优先级。

如果有高优先级,您将不得不停止其他所有事情(保存其状态或其他内容)并开始做任何需要做的事情。

只是一个想法

于 2008-10-08T16:05:52.743 回答