WCF作為一項通訊技術,必須保證傳輸的可靠性與 訊息的可靠性
傳輸可靠性:指的是點對點可靠性,確保資料包按順序到達。它不受網路等因素的影響
訊息可靠性:指提供了訊息端對端的保證,確保訊息的順序無誤。如果傳輸失敗,它還能提供重試功能自動處理網路阻塞、訊息緩衝、流量控制,根據具體情況適時調整發送訊息數。它還能通過對串連的驗證管理串連自身,並在不需要的時候清除串連
理論上,WCF服務的實現與服務契約的定義與它使用的綁定以及屬性無關。實際上,服務處理訊息以及契約定義都可能與訊息的有序傳遞有關。在WCF中使用DeliveryRequirementsAttribute來對服務或者契約應用這種約束。
[AttributeUsage(AttributeTargets.Interface | AttributeTargets.Class, AllowMultiple=true)]
public sealed class DeliveryRequirementsAttribute : Attribute, IContractBehavior, IContractBehaviorAttribute
{
private Type contractType;
private QueuedDeliveryRequirementsMode queuedDeliveryRequirements;
private bool requireOrderedDelivery;
}
如果 DeliveryRequirementsAttribute 應用於契約上,則實現此種契約的服務都應用可靠的有序傳遞的約束。如:
[ServiceContract]
[DeliveryRequirements(RequireOrderedDelivery = true)]
public interface ICalculator1
{
[OperationContract]
int Add(int x, int y);
}
如果應用於實現某契約類型的服務,則只有此服務應用可靠的有序傳遞的約束。 [DeliveryRequirements(RequireOrderedDelivery = true)]
publicclass CalculationService : ICalculator1
{
/**/
}
如果實現契約的服務實現多個服務契約,也可以通過DeliveryRequirements指定只有支援某種契約終結點的服務才應
用這種可靠的有序傳遞的約束。如下:
[DeliveryRequirements(RequireOrderedDelivery = true, TargetContract = typeof (ICalculator1))]
public class CalculationService : ICalculator1, ICalculator2
{
/**/
}
RequireOrderedDelivery預設為False,如果在介面或者服務類上使用Delivery卻不設定,RequireOrderedDelivery
則也是不會開啟有序傳遞的。