圖文演示W(wǎng)CF事物操作
對于有經(jīng)驗的人來說,處理事務(wù)還是比較容易的事情,但是對于向我們這讓的新手來說WCF事物操作的實現(xiàn)會給我們編程帶來什么樣的阻力可想而知,這里我們就簡單的分析一下。
#T#指定了TransactionFlow(TransactionFlowOption.Mandatory),而Binding卻沒有設(shè)置TransactionFlow為true 此時會出現(xiàn)類似"Bank"協(xié)定上至少有一個操作配置為將屬性設(shè)置為"強(qiáng)制",但是通道的綁定"WSDualHttpBinding"未使用 TransactionFlowBindingElement 進(jìn)行配置。沒有 TransactionFlowBindingElement,無法使用設(shè)置為"強(qiáng)制"的 TransactionFlowAttribute 屬性。WCF事物操作錯誤提示。
設(shè)置了[OperationBehavior(TransactionScopeRequired=true)]的操作,卻沒有在TransactionScorp中執(zhí)行,會發(fā)生類似"服務(wù)操作需要事務(wù)成為流"的異常,截圖如下:
也許上面兩個問題都是不是問題的問題,那這一點的確是需要我們研發(fā)人員注意的,否則我們會吃虧不少。這點涉及到事務(wù)和服務(wù)實例模式的聯(lián)系,我們通過學(xué)習(xí)WCF從理論到實踐:實例模式和對象生命周期 我們都學(xué)習(xí)到了實例在PerSession或者Single模式下不會每次都創(chuàng)建和消亡,這的確是一個不爭的真理,可在這里卻受到了挑戰(zhàn),不信你可以編寫一個程序,即使用你最放心的Single模式,那時不是就是說服務(wù)實例是一次創(chuàng)建,終身受用呢?下面就看看我***次編寫范例程序后得到的運行結(jié)果,我如下定義Bank
可在調(diào)用的時候,我卻發(fā)現(xiàn)了一個很奇怪的問題,按照理論來說,Bank服務(wù)實例應(yīng)該只創(chuàng)建一次,可運行的截圖卻是如下:
這個結(jié)果是不是令大家大失所望呢?這是因為實現(xiàn)了事務(wù)的得服務(wù)還要受到TransactionAutoCompleteOnSessionClose的限制,該屬性默認(rèn)情況是true,它指示 在WCF事務(wù)操作完成之后強(qiáng)制銷毀服務(wù)實例,相當(dāng)于調(diào)用服務(wù)的Dispose()方法進(jìn)行釋放,盡管是PerSession或者Single都難逃它的法網(wǎng)。如果想維持實例模式,可以將其設(shè)置為false,更改后運行效果便可如期望一致效果圖不再給出。