WF4:TransactionScope活动

在WF4.0中,主要有两个和事务处理有关的类,TransactionScope和TransactedReceivescope。TransactionScope是用于一般工作流应用程序中的事务处理,TransactedReceivescope则是用于WCF的分布式应用程序中,可用于客户端和服务器的工作流通信。 

本文主要说明TransactionScope活动的用法,当TransactionScope活动开始就会有一个新的System.Transactions.Transaction 事务,当内部活动都执行完成后会提交事务。
 

该活动主要有以下属性:

Body:为事务中要执行的活动。

TimeOut:事务的过期时间。

AbortInstanceOnTransactionFailure:事务取消时是否取消工作流的执行。

IsolationLevel 指定事务的隔离级别,有下列值:

成员名称

说明

Unspecified

正在使用与指定隔离级别不同的隔离级别,但是无法确定该级别。

Chaos

无法覆盖隔离级别更高的事务中的挂起的更改。

ReadUncommitted

可以进行脏读,意思是说,不发布共享锁,也不接受独占锁。

ReadCommitted

在正在读取数据时保持共享锁,以避免脏读,但是在事务结束之前可以更改数据,从而导致不可重复的读取或幻像数据。

RepeatableRead

在查询中使用的所有数据上放置锁,以防止其他用户更新这些数据。防止不可重复的读取,但是仍可以有幻像行。

Serializable

防止在事务完成之前由其他用户更新或插入数据。

Snapshot

通过在一个应用程序正在修改数据时存储另一个应用程序可以读取的相同数据版本来减少阻止。表示您无法从一个事务中看到在其他事务中进行的更改,即便重新查询也是如此。

 

多个TransactionScope活动嵌套的时候,如果内部的TransactionScope活动过期时间小于外部的TransactionScope活动过期时间。当这些TransactionScope活动的AbortInstanceOnTransactionFailure属性都为true时,工作流会取消,将激发工作流的Aborted事件。如果该属性设置不一致,False会激发工作流的OnUnhandledException事件。 

可以通过RuntimeTransactionHandleGetCurrentTransaction方法得到当前事务,如下:

  RuntimeTransactionHandle rth = new RuntimeTransactionHandle();

  rth = context.Properties.Find(rth.ExecutionPropertyName) as RuntimeTransactionHandle;

  Console.WriteLine("    TransactionID: " + rth.GetCurrentTransaction(context).TransactionInformation.LocalIdentifier.ToString());

 

使用rth.GetCurrentTransaction(context).Rollback(e)可以回滚当前事务 

原理和WF3.X的差不多,可以参考http://www.cnblogs.com/carysun/archive/2008/08/14/WFTransaction.html


本文转自生鱼片博客园博客,原文链接:http://www.cnblogs.com/carysun/archive/2009/12/02/WF4-TransactionScope.html,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值