WF4 怎样在启动流程时添加事务

本文详细介绍了WF4.0中TransactionScope的使用方法。通过具体代码示例展示了如何在自定义活动中实现事务处理,并提供了两种解决流程中没有事务的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

      在自定义活动中,如果要使用事务,可以按照如下代码:

 

      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()可以回滚当前事务。 

 

     启动流程后会发现 rth==null,造成这种情况的原因是整个流程没有事务,所以也就获取不到事务,解决方法:

 

     方法一:将自定义活动放到TransactionScope活动中。

     方法二:自己new 一个 TransactionScope 活动,如下:

            TransactionScope scope = new TransactionScope();

            scope.AbortInstanceOnTransactionFailure = true;

            scope.IsolationLevel = System.Transactions.IsolationLevel.Serializable;

            scope.Timeout = System.Transactions.TransactionManager.DefaultTimeout;

            scope.Body = new Workflow1();

            WorkflowApplication application = new WorkflowApplication(scope);

            application.run();

     这样在整个流程就都在事务活动中了,然后再按照上述代码就可以灵活操纵事务了。

     参考文献:

     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、付费专栏及课程。

余额充值