水青木华

四川广安人,98年硕士毕业于东北大学。从事过6年的企业级应用软件开发,04年开始涉足面向构件中间件领域,主要兴趣为面向构件中间件、工作流、BPEL、SCA/SDO。目前致力于面向服务软件(SOA)的产品定位与产品管理工作。您可以通过MSN:qhyou2002@hotmail.com 与我联系。
构客网首页  博客  论坛

 
  本文的标签
SOA (收录4671篇)
  用户信息
 
帐号:  新手必读
密码: 保存密码
 
  分类列表
全部类别(33 篇)
学习笔记(7 篇)
原创(7 篇)
转贴(19 篇)
  按月归档
2005年-10月(2 篇)
2006年-01月(14 篇)
2006年-10月(7 篇)
2007年-02月(5 篇)
2008年-10月(4 篇)
2009年-12月(1 篇)
  SOA2007 - SOA实践
我们何时迈向SOA
——SOA在中国的整体发展现状究竟如何?
我们如何迈向SOA
——中国企业如何迈出实施SOA的第一步?
我们应采用何种技术
——SOA国际标准SCA/SDO的具体内涵?
我们还需要何种技能
——SOA将如何改变系统架构设计以及项目管理过程?

微软WCF服务的事务

发布时间:2008年12月11日 作者:qhyou

阅读次数:1177次 类别:学习笔记 永久链接 Trackback 
参加SOA我有话说

通过简单示例描述微软WCF中的事务,以及如何开发带事务的服务。

         事务是指具有下列属性的操作集合:
  • 原子性。此属性可确保特定事务下完成的所有更新都已提交并保持持久,或所有这些更新都已中止并回滚到其先前状态。
  • 一致性。此属性可保证某一事务下所做的更改表示从一种一致状态转换到另一种一致状态。例如,将钱从支票帐户转移到存款帐户的事务并不改变整个银行帐户中的钱的总额。
  • 隔离。此属性可防止事务遵循属于其他并发事务的未提交的更改。隔离在确保一种事务不能对另一事务的执行产生意外的影响的同时,还提供一个抽象的并发。
  • 持续性。这意味着一旦提交对托管资源(如数据库记录)的更新,即使出现失败这些更新也会保持持久。
    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可以对事物进行如下配置:    
        利用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.  <service name="CalculatorService">
2.    <endpoint address="net.tcp://localhost:8008/CalcService"
3.      binding="netTcpBinding"
4.      bindingConfiguration="transactionalOleTransactionsTcpBinding"
5.      contract="ICalculator"
6.      name="OleTransactions_endpoint" />
7.  </service>

 

 
1.  <bindings>
2.    <netTcpBinding>
3.      <binding name="transactionalOleTransactionsTcpBinding"
4.        transactionFlow="true"
5.        transactionProtocol="OleTransactions"/>
6.    </netTcpBinding>
7.  </bindings>
 
 
     (二)、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) 是一个事务管理器,它为分布式事务提供支持。
 

 评论 查看全部评论