西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页编程开发其它知识 → WCF事务的概念与入门详解 事务具有原子性、一致性、隔离性、和持久性

WCF事务的概念与入门详解 事务具有原子性、一致性、隔离性、和持久性

相关软件相关文章发表评论 来源:本站整理时间:2010/9/19 22:18:45字体大小:A-A+

作者:佚名点击:187次评论:0次标签: WCF

  • 类型:源码相关大小:79KB语言:中文 评分:5.0
  • 标签:
立即下载

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的值

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)