圖文演示W(wǎng)CF事物操作
對(duì)于有經(jīng)驗(yàn)的人來說,處理事務(wù)還是比較容易的事情,但是對(duì)于向我們這讓的新手來說WCF事物操作的實(shí)現(xiàn)會(huì)給我們編程帶來什么樣的阻力可想而知,這里我們就簡(jiǎn)單的分析一下。
#T#指定了TransactionFlow(TransactionFlowOption.Mandatory),而Binding卻沒有設(shè)置TransactionFlow為true 此時(shí)會(huì)出現(xiàn)類似"Bank"協(xié)定上至少有一個(gè)操作配置為將屬性設(shè)置為"強(qiáng)制",但是通道的綁定"WSDualHttpBinding"未使用 TransactionFlowBindingElement 進(jìn)行配置。沒有 TransactionFlowBindingElement,無法使用設(shè)置為"強(qiáng)制"的 TransactionFlowAttribute 屬性。WCF事物操作錯(cuò)誤提示。
設(shè)置了[OperationBehavior(TransactionScopeRequired=true)]的操作,卻沒有在TransactionScorp中執(zhí)行,會(huì)發(fā)生類似"服務(wù)操作需要事務(wù)成為流"的異常,截圖如下:

也許上面兩個(gè)問題都是不是問題的問題,那這一點(diǎn)的確是需要我們研發(fā)人員注意的,否則我們會(huì)吃虧不少。這點(diǎn)涉及到事務(wù)和服務(wù)實(shí)例模式的聯(lián)系,我們通過學(xué)習(xí)WCF從理論到實(shí)踐:實(shí)例模式和對(duì)象生命周期 我們都學(xué)習(xí)到了實(shí)例在PerSession或者Single模式下不會(huì)每次都創(chuàng)建和消亡,這的確是一個(gè)不爭(zhēng)的真理,可在這里卻受到了挑戰(zhàn),不信你可以編寫一個(gè)程序,即使用你最放心的Single模式,那時(shí)不是就是說服務(wù)實(shí)例是一次創(chuàng)建,終身受用呢?下面就看看我***次編寫范例程序后得到的運(yùn)行結(jié)果,我如下定義Bank

可在調(diào)用的時(shí)候,我卻發(fā)現(xiàn)了一個(gè)很奇怪的問題,按照理論來說,Bank服務(wù)實(shí)例應(yīng)該只創(chuàng)建一次,可運(yùn)行的截圖卻是如下:

這個(gè)結(jié)果是不是令大家大失所望呢?這是因?yàn)閷?shí)現(xiàn)了事務(wù)的得服務(wù)還要受到TransactionAutoCompleteOnSessionClose的限制,該屬性默認(rèn)情況是true,它指示 在WCF事務(wù)操作完成之后強(qiáng)制銷毀服務(wù)實(shí)例,相當(dāng)于調(diào)用服務(wù)的Dispose()方法進(jìn)行釋放,盡管是PerSession或者Single都難逃它的法網(wǎng)。如果想維持實(shí)例模式,可以將其設(shè)置為false,更改后運(yùn)行效果便可如期望一致效果圖不再給出。


















