西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)其它知識 → WCF事務(wù)的概念與入門詳解 事務(wù)具有原子性、一致性、隔離性、和持久性

WCF事務(wù)的概念與入門詳解 事務(wù)具有原子性、一致性、隔離性、和持久性

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:本站整理時(shí)間:2010/9/19 22:18:45字體大。A-A+

作者:佚名點(diǎn)擊:187次評論:0次標(biāo)簽: WCF

  • 類型:源碼相關(guān)大。79KB語言:中文 評分:5.0
  • 標(biāo)簽:
立即下載

WCF事務(wù)是維持系統(tǒng)一致性并合理實(shí)現(xiàn)錯(cuò)誤恢復(fù)的最好方法,這也是WCF事務(wù)的意義,事務(wù)具有原子性、一致性、隔離性、和持久性,其他的管理方式是使用類似ADO.NET的編程模型來

管理。因?yàn)槭聞?wù)協(xié)調(diào)的問題(尤其在分布式事務(wù)上),WCF使用了一個(gè)叫“兩階段提交事務(wù)管理協(xié)議”,在第一階段事務(wù)管理器詢問參與事務(wù)的資源,了解提交修改記錄時(shí)是否有所

保留,在第二階段,如果第一階段投票要求提交事務(wù),則事務(wù)管理器將通知修改,反之,則會(huì)滾所作修改。

事務(wù)傳播
為了實(shí)現(xiàn)事務(wù)傳播,則必須啟用綁定,方法是在宿主配置文件中將TransactionFlow設(shè)置為true.

WCF還提供了TransactionFlowAttribute方法特性,控制客戶端是否將事務(wù)傳播到服務(wù),他包含如下定義:

TransactionFlowAttribute.NotAllowed,客戶端禁止事務(wù)流
TransactionFlowAttribute.Allowed,允許但不肯定
TransactionFlowAttribute.Mandatory,必須使用事務(wù)流

事務(wù)協(xié)議
根據(jù)事務(wù)參與放執(zhí)行范圍,WCF會(huì)提供不同事務(wù)管理協(xié)議,有輕量級協(xié)議、OleTx協(xié)議、WS原子性協(xié)議,輕量級協(xié)議為程序級協(xié)議,即只能在程序域中使用事務(wù)傳播,OleTX為機(jī)器級

協(xié)議,只能在本地計(jì)算機(jī)傳播,WS原子協(xié)議使用HTTP協(xié)議可以跨Internet。

TCP,IPC默認(rèn)使用OleTx協(xié)議,我們可以在配置文件的綁定中定義:transactionProtocol=“WSAtomicTransactionOctober2004”轉(zhuǎn)換為WS原子性協(xié)議。


事務(wù)管理器
WCF為我們提供第三方的事務(wù)管理器,來管理事務(wù)。這三個(gè)事務(wù)管理器分別是:輕量級事務(wù)管理器(LTM)、核心事務(wù)管理器(KTM)、分布式事務(wù)協(xié)調(diào)器(DTC),WCF能動(dòng)態(tài)的為我

們分配管理器,當(dāng)一個(gè)管理器不能滿足需求,WCF就會(huì)請求上一級的管理器來處理問題。


聲明事務(wù)
當(dāng)明白了上面的內(nèi)容,我們還需要聲明事務(wù),為了擁有一個(gè)事務(wù),WCF必須標(biāo)識每個(gè)契約方法,方法是設(shè)置TransactionScopeRequired=true,如:

Class Myservice:IMyContract

{

[OperationBehavior(TransactionScopeRequired=true)]

Public void MyMethod()

{

Transaction transaction=Transaction.Current;//獲取一個(gè)環(huán)境事務(wù)的引用

Debug.Assert(transaction!=null)//如果為空,則環(huán)境事務(wù)不存在

}

}

 

事務(wù)的傳播模式
不同的綁定事務(wù)流屬性(TransactionFlow)、契約中的事務(wù)流選項(xiàng)(TransactionFlowAttribute)、事務(wù)范圍屬性(TransactionScopeRequired)決定了事務(wù)將以何種模式進(jìn)行傳

播,根據(jù)不同組合,可得到Client/Service、Client、Service、None四種不同的情況(具體配置方法參照《Programming WCF Services》中的介紹),Client/Service能使用客戶

端的事務(wù),Client必須使用客戶端事務(wù),Service則確保服務(wù)必須有一個(gè)事務(wù),None則永遠(yuǎn)不使用事務(wù)

 

投票完成事務(wù)
前面已經(jīng)學(xué)習(xí)了WCF的服務(wù)傳播方法,但是卻不知道WCF的事務(wù)何時(shí)提交或何時(shí)終止,所以我們投票決定事務(wù)的完成方式,WCF提供了自動(dòng)和顯式兩種投票方式:

1,自動(dòng)投票:

事務(wù)投票只需要在聲明事務(wù)時(shí),再聲明TransactionAutoComplete值為true即可,如:

[OperationBehavior(TransactionScopeRequired=true,TransactionAutoComplete=true)]
Public void MyMethod()

{

}

2.顯式投票:
顯式投票首先關(guān)閉自動(dòng)投票,即TransactionAutoComplete=false,
在服務(wù)操作返回結(jié)果前使用OperactionContext.Current.SetTransactionComplete();

事務(wù)的屬性
事務(wù)可以設(shè)置隔離級別和超時(shí)時(shí)間,分別為設(shè)置ServiceBehavior的TransactionIsolationLevel和TransactionTimeout的值

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)