三分鐘了解WCF事務
經過長時間學習WCF,對它還是很熟悉的,這里就和大家分享一下關于WCF事務的概念,看完本文你肯定有不少收獲,希望本文能教會你更多東西。兩個應用程序之間的通信有很多種方式,比如,我們可以使用XML與Webservice通信,使用消息與MSMQ互通,使用XML或二進制流與.NetRemoting通信等等。
#T#但是如果一個應用程序需要同時使用這幾種來完成功能的話將給維護帶來相當大的麻煩,WCF的出現則統一了這種局面,WCF是什么?WCF是通過一種面向服務的新型編程模型簡化了關聯應用程序的開發。通過提供分層的體系結構,WCF 支持多種風格的分布式應用程序開發。 WCF 通道體系結構在底層提供了異步的非類型化消息傳遞基元。而建立在此基礎之上的是用于進行安全可靠的事務處理數據交換的各種協議功能,以及廣泛的傳輸協議和編碼選擇。WCF事務原本是一件難于實現的事情,可WCF總是能化腐朽為神奇,它能夠通過簡單的聲明式編程方式,便可以實現分布式的WCF事務,下面就來看下實現此目標的功臣:
1) TransactionFlowAttribute:操作契約(OperationContractAttribute)的一個屬性,它能夠指示所屬操作(Operation)的事務選項(TransactionFlowOption)。
2) TransactionFlowOption:它是TransactionFlowAttribute構造函數中的參數,是一個枚舉(enum),包括三個枚舉項NotAllowed:不允許事務,是缺省值;Allowed:允許事務,意味著事務可有可無;Mandatory:強制事務,表示事務是必須的。
3) TransactionAutoCompleteOnSessionClose:它是操作行為(OperationBehaviorAttribute) 的一個屬性,用于標注事務完成之后,服務端實例是否自動釋放,這個屬性和服務對象實例模式緊密相關,使用的時候,應該著重小心,下面也會有說明。
4) TransactionIsolationLevel:也是操作行為(OperationBehaviorAttribute)的一個屬性,用于指示事務隔離方式(isolation level).包括5中選項:Any,ReadUncommitted,ReadCommitted,RepeatableRead,Serializable,事務的隔離方式相關知識比較復雜,留作文章的第二點中將具體闡述
5) TransactionTimeout:也是操作行為(OperationBehaviorAttribute)的一個屬性,用于指示事務的超時時間,默認為TimeSpan.Zero,表示不會受超時時間的限制..:: OperationBehaviorAttribute:也是操作行為(OperationBehaviorAttribute)的一個屬性,用于指示分布式事務選項,如果設置為true,那么必須在事務范圍(Transaction Scorp)內。
通過上面幾個屬性的使用,我們便能夠輕松的在WCF中實現事務以及分布式事務。