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

我们在同一队列中放置了插入命令,后面跟着许多更新命令,并且偶尔有一个更新胜过插入。

添加了广泛的日志记录后,很显然,它们是以正确的顺序添加到队列中并以不同的顺序进行处理的。

我已经在Google上发表了几篇文章,指出这种行为是可以预期的,但是似乎必须可以将其配置为以某种方式进行排序。

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

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



我不知道为什么会出现此错误,因为一切“似乎”都已正确设置。我尚未设法确认此设置允许用于MSMQ,因为它似乎是WS-RM设置,并且AFAIK netMSMQBinding不支持WS-RM。

最佳答案

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

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

bool IBindingDeliveryCapabilities.AssuresOrderedDelivery
{
    get
    {
        return false;
    }
}

10-08 14:25