C#综合揭秘——细说事务

2 篇文章 0 订阅

细说事务

整理自风尘浪子

  • ACID特性
    • 原子性(Atomicity):当事务结束,它对所有资源状态的改变都被视为一个操作,这些操作要不同时成功,要不同时失败。
    • 一致性(Consistency):操作完成后,所有数据必须符合业务规则,否则事务必须中止 。
    • 隔离性(Isolation):事务以相互隔离的方式执行,事务以外的实体无法知道事务过程中的中间状态。
    • 持久性(Durable):事务提交后,数据必须以一种持久性方式存储起来 。
    • C#综合揭秘——细说事务 - 风尘浪子 - 博客园
  • 资源管理器RM(Resources Manager):在软件系统当中可以看到无论在数据库、Web服务、WCF、文件系统都存在着数据参与到事务运作当中,我们把管理这些数据的工具称为资源管理器RM(Resources Manager)。
  • 事务管理器TM(Transaction Manager):就是协调多个资源管理器的工作,保证数据完整性的工具。
    • 轻量级事务管理器(LTM)
    • 包括在System.Transactions 命名空间内的一个事务管理框架
    • 只能管理单个应用程序域内的事务
    • 性能最高的事务管理器
    • 尽可能地使用 LTM 事务管理器
    • 核心事务管理器(KTM)
    • 用于Windows Vista和Windows Server 2008 系统中的轻量级事务管理器
    • 与LTM相像,它可以管理多个易变的RM,但只能管理一个持久化RM。
    • 分布式事务协调器(DTC)
    • 能管理多个持久化RM中的事务,事务可以跨越应用程序域、进程、硬件、域等所有的边界。
  • 事务类 System.Transactioins.Transaction
    • Transaction是用于显式管理事务的一个类。
    • 通过Transaction可以直接管理事务的中止、释放,也可以获取、克隆当前的环境事务类。
    • Transaction的公用属性
    • Current:获取或设置环境事务。
    • IsolationLevel:获取事务的隔离级别
    • TransactionInformation:检索有关某个事务的附加信息。是事务状态的记录,它可以跟踪事务动作,分辨事务现处的状态,记录本地事务与分布式事务的Guid。
      • LocalIndentifier:本地事务的标识符
      • DistributedIndentifier:分布式事务的标识符
    • Transaction的常用公用方法
    • Rollback:中止事务、回滚。
    • Dispose:释放事务对象。
    • Clone:创建事务克隆
    • DependentClone:创建事务的依赖克隆。
    • Transaction的事件
    • TransactionCompleted:在事务完成后执行
  • 隐式事务 TransactionScope
    • TransactionScope的概念
    • 事务完成前程序应该调用TransactionScope的Complete()方法,把事务提交,最后利用Dispose()释放事务对象。
    • 若执行期间出现错误,事务将自动回滚。
    • TransactionScope的构造函数
    • TransactionScope(transactionScopeOption)
      • TransactionScopeOption.Required:该范围需要一个事务。 如果已经存在环境事务,则使用该环境事务。 否则,在进入范围之前创建新的事务。 这是默认值。
      • TransactionScopeOption.RequiresNew:总是为该范围创建新事务。
      • TransactionScopeOption.Suppress:环境事务上下文在创建范围时被取消。 范围中的所有操作都在无环境事务上下文的情况下完成。
  • 在WCF中实现事务
    • 事务是以方法为边界的,每个WCF服务的方法可以有独立事务的执行模式。
    • 事务可以在多个服务中传播,也可以在服务端与客户端之间传播
    • 简单的事务使用方式
    • 在方法之上使用隐式事务:[OperationBehavior(TransactionScopeRequired=true,TransactionAutoComplete=true)]
    • 在方法之上使用显示事务:[OperationBehavior(TransactionScopeRequired=true,TransactionAutoComplete=false)]
    • 事务的传播
    • 在同一个应用程序域中,事务默认能相互传播
    • 在WCF里把服务中的事务传播称作事务流(Transaction Flow)
    • 事务流需要在服务端和客户端成功传播或使用分布式事务,必须具备的条件:
      • 绑定必须支持事务,在WCF内并非所有绑定都支持事务,像常用的BasicHttpBinding就不支持事务的传播。只有以下几个绑定才能支持事务流的运转:NetTcpBinding、WSHttpBinding、WSDualHttpBinding、WSFederationHttpBinding、NetNamedPipeBinding。
      • 服务方法必须设置好TransactionScopeRequired与TransactionAutoComplete两个事务的基本元素,要成功启动事务,这是基础条件。
      • 把TransactionFlow设置为true,这代表启动事务流,允许在SOAP头部放置事务的信息。一般情况下TransactionFlow的默认值为false ,这表示事务只能在服务器的同一应用程序域内流转,而不能实现服务端与客户端之间的传播。
      • 把服务契约的TransactionFlowOption设置为Allowed,这代表允许客户端的事务传播到服务端。
      • NotAllowed,这代表了禁止客户端传播事务流到服务端,即使客户端启动了事务,该事务也会被忽略;
      • Allowed,这代表允许客户端的事务传播到服务端,但服务器端不一定会引用到此事务;
      • Mandatory,这代表服务端与客户端必须同时启动事务流,否则就会抛出InvalidOperationException异常。
      • 客户端必须启动一个事务,在最后使用TransactionScope.Complete ( ) 提交事务。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值