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















 
 
 





 
 
 
 