我们有一个支持多个接口的WCF 4.6服务器。为简单起见,我们假设所有接口的所有方法都是单向的。通常在客户端和服务器端使用ConcurrencyMode = Multiple处理请求。
有一个优先级较低的接口,而所有其他接口的优先级较高。这意味着一旦客户端想要调用优先级较低的接口的方法,它必须首先检查当前是否正在处理任何高优先级接口的方法。这是什么意思?从我在某个论坛上收集到的内容可以看出,当调用单向方法时,如果当时正在发送另一条消息,则该消息要么立即通过线路发送,要么放在WCF内部队列中。控制立即返回给调用者(除非队列已满)。
问题是,是否有一种方法让调用者确定WCF内部输出队列(或队列)是空的?理由是我们只想发送优先级较低的消息ML1如果是空的如果它不为空,则在另一条消息MH1:
之后,ML1将被放入队列中MH1, ML1
当MH1正在等待处理/正在处理时,另一个更高优先级的消息MH2可能被交给WCF发送,在这种情况下,它将被放置在低优先级消息ML1之后的队列中:
MH1, ML1, MH2
我们想避免这样做。 我意识到即使我们检查了队列是空的,它也可能在我们发送优先级较低的消息之前变为非空 - 但是没关系,我们可以忍受这种情况,因为它不会经常发生。
我已经阅读了一些有关在业务级别对请求进行优先级排序的讨论,但如果上面提到的关于WCF内部队列的说法是正确的,那就没有用了,因为即使我们知道没有突出的更高在业务级别的优先级请求,我们无法确定此类请求是否在队列中等待轮到他们发送。也不是WCF路由似乎做我们需要的。 此外,由于业务考虑,我们仅限于每台服务器使用一个端口。