首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >netMSMQbinding订购送货

netMSMQbinding订购送货
EN

Stack Overflow用户
提问于 2009-04-08 11:42:03
回答 3查看 2.1K关注 0票数 5

在使用WCF netMSMQbinding时,是否有可能保证订单交付?

我们在同一个队列中放置一个insert命令,后面跟着多个update命令,有时其中一个更新超过insert。

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

我已经在谷歌上搜索了几篇文章,这些文章指出,这种行为是可以预料的,但似乎必须要对其进行配置,以某种方式对其进行排序。

我们的队列是事务性的,所以我不认为在目的地添加序列号和重新排序是可行的,因为这样会失去交易性。

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

合同上的DeliveryRequirementsAttribute 'IService‘指定QueuedDeliveryRequirements值为NotAllowed。但是,此契约的配置绑定指定它确实支持排队传递。队列绑定不能与此契约一起使用。

我不知道为什么我们会得到这个错误,因为所有的“出现”都是正确的设置。不过,我还没有找到任何关于MSMQ是否允许使用此设置的确认,因为它似乎是一个WS设置,而且AFAIK netMSMQBinding不支持WS。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-08 13:17:36

MSMQ不支持有序传递,因此您不能。

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

代码语言:javascript
复制
bool IBindingDeliveryCapabilities.AssuresOrderedDelivery
{
    get
    {
        return false;
    }
}
票数 3
EN

Stack Overflow用户

发布于 2009-08-17 11:53:11

西蒙·吉廷斯的这篇文章似乎表明订购交货是可能的:

事实证明,有一个无文档的特性可以处理这种情况:

  • 将批处理大小为1的TransactedBatchingBehavior应用于服务端点。
  • 对于服务实现,必须将ReleaseServiceInstanceOnTransactionComplete设置为true。

一旦完成了这两件事,我的测试程序就不再产生无序消息。

票数 2
EN

Stack Overflow用户

发布于 2009-04-10 16:28:33

看起来您可以对消息进行分组,因此可以在合同中指定订单。看看这个MSDN关于分组消息的文章

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/729612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档