微软.NET3.5 的事务

 

  事务是指具有下列属性的操作集合:

  • 原子性。此属性可确保特定事务下完成的所有更新都已提交并保持持久,或所有这些更新都已中止并回滚到其先前状态。
  • 一致性。此属性可保证某一事务下所做的更改表示从一种一致状态转换到另一种一致状态。例如,将钱从支票帐户转移到存款帐户的事务并不改变整个银行帐户中的钱的总额。
  • 隔离。此属性可防止事务遵循属于其他并发事务的未提交的更改。隔离在确保一种事务不能对另一事务的执行产生意外的影响的同时,还提供一个抽象的并发。
  • 持续性。这意味着一旦提交对托管资源(如数据库记录)的更新,即使出现失败这些更新也会保持持久。

    WCF支持两种事务, WS—AtomicTransction(WS-AT)和OLE事务协议。WS—AT用于将事务流动到可以互操作的第三方WS服务。

    WCF提供了事务流的概念。

    WCF的事务模型包括:WCF事务、System.Transaction事务、MSDTC事务三种模型。

(一)、Windows Communication Foundation(WCF)事务:

        WCF事务是一种声明式事务,而且借助于它对 WS-AtomicTransaction (WS-AT) 协议的支持,应用程序可以将事务流式传输到使用 WCF 或第三方技术生成的 Web 服务。

        WCF 事务功能提供了一些属性和配置,用于以声明方式指定基础结构应当创建、流式传输和同步事务的方式和时间。

        利用ServiceModel可以对事物进行如下配置:    

  • 使用 ServiceBehaviorAttribute 属性配置事务超时值以及隔离级别的筛选。
  • 启用事务功能并使用 OperationBehaviorAttribute 属性配置事务完成行为。
  • 使用协定方法上的 ServiceContractAttributeOperationContractAttribute 属性来要求、允许或拒绝事务流。

        利用System.ServiceModel 开发带事务的服务,步骤如下:

    1、接口定义:定义接口的时候使用 annotation对方法进行标识即可,如:

          

1.  [ServiceContract]

2.  public interface ICalculator

3.  {

4.  [OperationContract]

5.  // Use this to require an incoming transaction

6.  [TransactionFlow(TransactionFlowOption.Mandatory)]

7.  double Add(double n1, double n2);

   

8.  [OperationContract]

9.  // Use this to permit an incoming transaction

10. [TransactionFlow(TransactionFlowOption.Allowed)]

11. double Subtract(double n1, double n2);

}

    2、实现:在实现类中使用 ServiceBehaviorAttribute 有选择地指定 TransactionIsolationLevelTransactionTimeout

        如:

          

1.  [ServiceBehavior(

2.  TransactionIsolationLevel = System.Transactions.IsolationLevel.Serializable,

3.  TransactionTimeout = "00:00:45")]

4.  public class CalculatorService : ICalculator

5.  {

6.  [OperationBehavior(TransactionScopeRequired = true)]

7.  public double Add(double n1, double n2)

8.  {

9.  // Perform transactional operation

10. RecordToLog(String.Format("Adding {0} to {1}", n1, n2));

11. return n1 + n2;

12. }

13.

14. [OperationBehavior(TransactionScopeRequired = true)]

15. public double Subtract(double n1, double n2)

16. {

17. // Perform transactional operation

18. RecordToLog(String.Format("Subtracting {0} from {1}", n2, n1));

19. return n1 - n2;

20. }

21.

22. private static void RecordToLog(string recordText)

23. {

24. // Database operations omitted for brevity

25. // This is where the transaction provides specific benefit

26. // - changes to the database will be committed only when

27. // the transaction completes.

28. }

29.}

    3、配置:

        在配置文件中配置绑定,指定事务上下文应进行流处理,并指定要使用的协议执行此操作。

1. 

2. 

3.  binding="netTcpBinding"

4.  bindingConfiguration="transactionalOleTransactionsTcpBinding"

5.  contract="ICalculator"

6.  name="OleTransactions_endpoint" />

7. 

   

1. 

2. 

3. 

4.  transactionFlow="true"

5.  transactionProtocol="OleTransactions"/>

6. 

7. 

   

   

(二)、System.Transaction事务

            System.Transaction命名空间提供了很多与实务相关的类和接口,System.Transaction命名空间提供了一个基于 Transaction 类的显式编程模型和一个使用 TransactionScope 类的隐式编程模型(在此模型中,基础结构自动管理事务)。微软推荐使用隐式事务编程模型(由于它易于使用并且效率很高)。

            隐式事务编程示例:

              

void RootMethod()
{
     using(
TransactionScope scope = new TransactionScope())

     {
          /* Perform transactional work here */
          SomeMethod();

             SomeOtherMethod();
          scope.Complete();
     }
}

void SomeMethod()
{    
//事务嵌套  
     using(
TransactionScope scope = new TransactionScope())

     {
          /* Perform transactional work here */
          scope.Complete();
     }
}

 

}

     (三)MSDTC 事务

            Microsoft Distributed Transaction Coordinator (MSDTC) 是一个事务管理器,它为分布式事务提供支持。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值