zoukankan      html  css  js  c++  java
  • WCF事务的概念与入门详解(一)

    WCF事务是维持系统一致性并合理实现错误恢复的最好方法,这也是WCF事务的意义,事务具有原子性、一致性、隔离性、和持久性,他的管理方式是使用类似ADO.NET的编程模型来

    管理。因为事务协调的问题(尤其在分布式事务上),WCF使用了一个叫“两阶段提交事务管理协议”,在第一阶段事务管理器询问参与事务的资源,了解提交修改记录时是否有所

    保留,在第二阶段,如果第一阶段投票要求提交事务,则事务管理器将通知修改,反之,则会滚所作修改。

    事务传播
    为了实现事务传播,则必须启用绑定,方法是在宿主配置文件中将TransactionFlow设置为true.

    WCF还提供了TransactionFlowAttribute方法特性,控制客户端是否将事务传播到服务,他包含如下定义:

    TransactionFlowAttribute.NotAllowed,客户端禁止事务流
    TransactionFlowAttribute.Allowed,允许但不肯定
    TransactionFlowAttribute.Mandatory,必须使用事务流

    事务协议
    根据事务参与放执行范围,WCF会提供不同事务管理协议,有轻量级协议、OleTx协议、WS原子性协议,轻量级协议为程序级协议,即只能在程序域中使用事务传播,OleTX为机器级

    协议,只能在本地计算机传播,WS原子协议使用HTTP协议可以跨Internet。

    TCP,IPC默认使用OleTx协议,我们可以在配置文件的绑定中定义:transactionProtocol=“WSAtomicTransactionOctober2004”转换为WS原子性协议。


    事务管理器
    WCF为我们提供第三方的事务管理器,来管理事务。这三个事务管理器分别是:轻量级事务管理器(LTM)、核心事务管理器(KTM)、分布式事务协调器(DTC),WCF能动态的为我

    们分配管理器,当一个管理器不能满足需求,WCF就会请求上一级的管理器来处理问题。


    声明事务
    当明白了上面的内容,我们还需要声明事务,为了拥有一个事务,WCF必须标识每个契约方法,方法是设置TransactionScopeRequired=true,如:

    Class Myservice:IMyContract

    {

         [OperationBehavior(TransactionScopeRequired=true)]

         Public void  MyMethod()

          {

           Transaction transaction=Transaction.Current;//获取一个环境事务的引用

           Debug.Assert(transaction!=null)//如果为空,则环境事务不存在

          }

    }

     

    事务的传播模式
    不同的绑定事务流属性(TransactionFlow)、契约中的事务流选项(TransactionFlowAttribute)、事务范围属性(TransactionScopeRequired)决定了事务将以何种模式进行传

    播,根据不同组合,可得到Client/Service、Client、Service、None四种不同的情况(具体配置方法参照《Programming WCF Services》中的介绍),Client/Service能使用客户

    端的事务,Client必须使用客户端事务,Service则确保服务必须有一个事务,None则永远不使用事务

    投票完成事务
    前面已经学习了WCF的服务传播方法,但是却不知道WCF的事务何时提交或何时终止,所以我们投票决定事务的完成方式,WCF提供了自动和显式两种投票方式:

    1,自动投票:

    事务投票只需要在声明事务时,再声明TransactionAutoComplete值为true即可,如:
        
         [OperationBehavior(TransactionScopeRequired=true,TransactionAutoComplete=true)]
         Public void  MyMethod()

          {

          }

    2.显式投票:
    显式投票首先关闭自动投票,即TransactionAutoComplete=false,
    在服务操作返回结果前使用OperactionContext.Current.SetTransactionComplete();

    事务的属性
    事务可以设置隔离级别和超时时间,分别为设置ServiceBehavior的TransactionIsolationLevel和TransactionTimeout的值

  • 相关阅读:
    单相全桥逆变电路工作过程
    单片机实用工具大全
    电路元件
    IC SPEC相关数据
    庖丁解牛,经典运放电路分析
    microstrip(微带线)、stripline(带状线) 指什么?
    [转]关于时钟线/数据线/地址线上串联电阻及其作用
    正激变换电路工作原理
    从Buck-Boost到Flyback
    [转载].关于耦合电容、滤波电容、去耦电容、旁路电容作用
  • 原文地址:https://www.cnblogs.com/mane/p/1830430.html
Copyright © 2011-2022 走看看