使用netMSMQbinding进行有序交付

Mod*_*dan 5 messaging wcf msmq ordered-delivery

使用WCF netMSMQbinding时是否可以保证有序交付?

我们在同一队列上放置一个insert命令后跟一些更新命令,偶尔会有一个更新击败插入.

添加了大量日志记录后,很明显它们以正确的顺序添加到队列中,并以不同的顺序进行处理.

我已经设法向Google发表了一些文章,声明这种行为是预期的,但似乎必须有可能将其配置为以某种方式进行排序.

我们的队列是事务性的,所以我不认为在目的地添加序列号和重新排序会起作用,因为这会丢失事务性

如果我添加属性,[DeliveryRequirements(RequireOrderedDelivery=true, QueuedDeliveryRequirements=QueuedDeliveryRequirementsMode.Require)]我会收到以下错误:

合同'IService'上的DeliveryRequirementsAttribute指定QueuedDeliveryRequirements值NotAllowed.但是,此协定的已配置绑定指定它确实支持排队传递.排队的绑定不得与此合同一起使用.

我不知道为什么我们会收到这个错误,因为所有"看起来"都是正确设置的.我没有设法找到任何确认允许MSMQ的设置,因为它似乎是一个WS-RM设置,而AFAIK netMSMQBinding不支持WS-RM.

Krz*_*mic 3

MSMQ 不支持有序交付,因此您不能。

看一下 System.ServiceModel.Channels.MsmqBindingElementBase+BindingDeliveryCapabilityHelper,它是指定 MSMQ 绑定功能的类,以及它如何实现该属性:

bool IBindingDeliveryCapabilities.AssuresOrderedDelivery
{
    get
    {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)