经过负载测试,我发现有些数据包不连续。
这是一个基本的 WCF 服务,客户端不断发送请求。
使用 netMsmqBinding 可以保证(按顺序、精确一次)交付。
您需要做的第一件事是创建实际的 MSMQ 消息队列事务。
其次,您必须告诉 WCF 加入事务,如下所示:
[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
public void Handle(Something msg)
{
....
}
最后,您需要使用 exactOnce 绑定参数指定服务的保证行为:
<netMsmqBinding>
<binding name="netMsmqBinding_IMyServiceInterface"
exactlyOnce="true">
...
</binding>
</netMsmqBinding>
ExactlyOnce 告诉 WCF 我们需要事务,每条消息都将按照发送的顺序只发送一次。