使用ConcurrencyMode.Multiple模式保留WCF服务中的消息顺序

时间:2011-06-14 09:04:33

标签: wcf concurrency multicore

有一个WCF服务处理传入的请求,并且每个传入的消息都会产生相应的输出消息,并将其发送到另一个WCF服务。消息的顺序很重要,不会受到干扰。因此,服务应按照服务接收的相同顺序生成相应的输出消息。同时处理请求也很重要,这样才能从多核CPU中受益。

在这种情况下,保留输入和输出之间的消息顺序的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

这完全取决于您的实施。 WCF只能强制执行有序传递(通过可靠的会话或MSMQ),以便您可以确保按照发送的顺序接收消息,但没有任何功能可以确保您的操作将以相同的顺序发送消息(一个消息可以更快地处理,然后再收到另一个消息)。如果您要按顺序处理邮件,ConcurrencyMode设置为Multiple只会让事情变得非常复杂。您将不得不手动同步操作,这将降低并发性,在最坏的情况下,回退接近ConcurrencyMode.Single。同步很难实现,因为在操作中这样做是不够的 - 输出消息的WCF通道堆栈处理也必须同步。