深入理解WCF配置可靠性
WCF還是比較常用的,于是我研究了一下WCF配置可靠性,在這里拿出來(lái)和大家分享一下,希望對(duì)大家有用。通過(guò)編程方式或管理方式都可以WCF配置可靠性(以及有序傳遞)。如果我們啟用了可靠性,則客戶(hù)端與服務(wù)宿主端必須保持一致,否則客戶(hù)端無(wú)法與服務(wù)通信。我們可以只對(duì)支持它的綁定WCF配置可靠性。例所示的服務(wù)端配置文件,使用了綁定配置節(jié),啟用了TCP綁定的可靠性。
例:?jiǎn)⒂肨CP綁定的可靠性
- <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綁定提供了略微不同的屬性來(lái)WCF配置可靠性。例如,NetTcpBinding綁定接受一個(gè)Boolean型的構(gòu)造函數(shù)參數(shù),用來(lái)啟動(dòng)可靠性:
- public class NetTcpBinding : Binding,...
- {
- public NetTcpBinding(...,bool reliableSessionEnabled);
- //更多成員
- }
我們只能在對(duì)象的構(gòu)造期間啟用可靠性。如果通過(guò)編程方式設(shè)置可靠性,需要?jiǎng)?chuàng)建支持可靠性的綁定對(duì)象:
- Binding reliableTcpBinding = new NetTcpBinding(...,true);
- NetTcpBinding定義了只讀的ReliableSession類(lèi),通過(guò)它獲取可靠性的狀態(tài):
- 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#理論上,服務(wù)代碼和契約定義應(yīng)該與它使用的綁定及屬性無(wú)關(guān)。服務(wù)不應(yīng)該考慮綁定,在服務(wù)代碼中也不應(yīng)該包含它所使用的綁定。不管配置的綁定是哪一種,服務(wù)都應(yīng)該能夠正常工作。然而實(shí)際上,服務(wù)的實(shí)現(xiàn)或者契約本身都會(huì)依賴(lài)于消息的有序傳遞(Ordered Delivery)。為了幫助契約或服務(wù)的開(kāi)發(fā)者能夠約束支持的綁定,WCF定義了DeliveryRequirementsA。