![](/img/trans.png)
[英]Ordered delivery with NetNamedPipeBinding using oneWay calls
[英]Ordered Delivery with netMSMQbinding
使用WCF netMSMQbinding時是否可以保證有序交付?
我們在同一隊列中放置了插入命令,后面跟着許多更新命令,並且偶爾有一個更新勝過插入。
添加了廣泛的日志記錄后,很明顯它們以正確的順序添加到隊列中並以不同的順序進行處理。
我已經在Google上寫了幾篇文章,指出這種行為是可以預期的,但是似乎必須可以將其配置為以某種方式進行排序。
我們的隊列是事務性的,所以我認為在目的地添加序列號和重新排序不會起作用,因為那樣會失去事務性
如果添加屬性[DeliveryRequirements(RequireOrderedDelivery=true, QueuedDeliveryRequirements=QueuedDeliveryRequirementsMode.Require)]
出現以下錯誤:
合同“ IService”上的DeliveryRequirementsAttribute指定QueuedDeliveryRequirements值為NotAllowed。 但是,為此合同配置的綁定指定它確實支持排隊傳送。 隊列綁定不能與該合同一起使用。
我不知道為什么會出現此錯誤,因為一切“似乎”都已正確設置。 我尚未設法確認此設置允許用於MSMQ,因為它似乎是WS-RM設置,並且AFAIK netMSMQBinding不支持WS-RM。
MSMQ不支持有序交付,因此您不能。
看一下System.ServiceModel.Channels.MsmqBindingElementBase + BindingDeliveryCapabilitiesHelper,它是指定MSMQ的綁定功能的類,以及如何實現該屬性:
bool IBindingDeliveryCapabilities.AssuresOrderedDelivery
{
get
{
return false;
}
}
Simon Gittins的這則帖子似乎表明可以訂購送貨:
事實證明,有一個未記錄的功能可以處理這種情況:
- 將批處理大小為ONE的TransactedBatchingBehavior應用於服務端點。
- 必須在服務實現上將ReleaseServiceInstanceOnTransactionComplete設置為true。
完成這兩項操作后,我的測試程序將不再產生亂序消息。
看起來您可以對消息進行分組,因此可以在合同中指定訂單。 查閱有關分組消息的MSDN文章 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.