深入理解WCF配置可靠性
WCF還是比較常用的,于是我研究了一下WCF配置可靠性,在這里拿出來和大家分享一下,希望對大家有用。通過編程方式或管理方式都可以WCF配置可靠性(以及有序傳遞)。如果我們啟用了可靠性,則客戶端與服務宿主端必須保持一致,否則客戶端無法與服務通信。我們可以只對支持它的綁定WCF配置可靠性。例所示的服務端配置文件,使用了綁定配置節,啟用了TCP綁定的可靠性。
例:啟用TCP綁定的可靠性
- <system.serviceModel>
- <services>
- <service name = "MyService">
- <endpoint
- address = "net.tcp://localhost:8000/MyService"
- binding = "netTcpBinding"
- bindingConfiguration = "ReliableTCP"
- contract = "IMyContract"/>
- </service>
- </services>
- <bindings>
- <netTcpBinding>
- <binding name = "ReliableTCP">
- <reliableSession enabled = "true"/>
- </binding>
- </netTcpBinding>
- </bindings>
- </system.serviceModel>
至于編程配置方式,TCP綁定和WS綁定提供了略微不同的屬性來WCF配置可靠性。例如,NetTcpBinding綁定接受一個Boolean型的構造函數參數,用來啟動可靠性:
- public class NetTcpBinding : Binding,...
- {
- public NetTcpBinding(...,bool reliableSessionEnabled);
- //更多成員
- }
我們只能在對象的構造期間啟用可靠性。如果通過編程方式設置可靠性,需要創建支持可靠性的綁定對象:
- Binding reliableTcpBinding = new NetTcpBinding(...,true);
- NetTcpBinding定義了只讀的ReliableSession類,通過它獲取可靠性的狀態:
- public class ReliableSession
- {
- public TimeSpan InactivityTimeout
- {get;set;}
- public bool Ordered
- {get;set;}
- //更多成員
- }
- public class OptionalReliableSession : ReliableSession
- {
- public bool Enabled
- {get;set;}
- //更多成員
- }
- public class NetTcpBinding : Binding,...
- {
- public OptionalReliableSession ReliableSession
- {get;}
- //更多成員
- }
#T#理論上,服務代碼和契約定義應該與它使用的綁定及屬性無關。服務不應該考慮綁定,在服務代碼中也不應該包含它所使用的綁定。不管配置的綁定是哪一種,服務都應該能夠正常工作。然而實際上,服務的實現或者契約本身都會依賴于消息的有序傳遞(Ordered Delivery)。為了幫助契約或服務的開發者能夠約束支持的綁定,WCF定義了DeliveryRequirementsA。