微软WCF服务的事务

2009-1-12    | |
打印本文章
RSS

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

关键词:微软 WCF服务 WS-AT OLE 互操作 WS服务

正在加载数据...

  通过简单示例描述微软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可以对事物进行如下配置:    

  使用ServiceBehaviorAttribute属性配置事务超时值以及隔离级别的筛选。

  启用事务功能并使用OperationBehaviorAttribute属性配置事务完成行为。

  使用协定方法上的ServiceContractAttribute和OperationContractAttribute属性来要求、允许或拒绝事务流。

  利用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有选择地指定TransactionIsolationLevel和TransactionTimeout

  如:

  1. [ServiceBehavior(2.      TransactionIsolationLevel = System.Transactions.IsolationLevel.Serializable,3.      TransactionTimeout = "00:00:45")]4.  public class CalculatorService : ICalculator5.  {6.      [OperationBehavior(TransactionScopeRequired = true)]7.      public double Add(double n1, double n2)8.      {9.          // Perform transactional operation10.        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 operation18.        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 brevity25.        // This is where the transaction provides specific benefit26.        // - changes to the database will be committed only when27.        // 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)是一个事务管理器,它为分布式事务提供支持。

原文出处:http://gocom.primeton.com/blog16233_38.htm
来源:goCom构客网    作者:qhyou    
  评论
相关的专家答疑
 
WCF支持两种事务,WS—AtomicTransction(WS-AT)和OLE事务协议。WS—AT用于将事务流动到可以互操作的第三方WS服务……
 
Tuscany作为SCA规范的实现越来越得到广大编程爱好者的关注,现在Tuscany发布的最新版本为今年10月份发布的1.3.2,现在正在Mail List上做1.4的RC3投票工作……
 
SOBA(Service-Oriented Business Application)面向服务的业务应用,其理念是构造可复用、易集成的业务应用。2.0时代的企业应用中系统越来越多,越来越复杂……
 
在SOA的浪潮中,人们更关心基于面向服务架构构建的系统是什么样子,具备哪些特性,需要哪些关键技术和基础设施。SOBA为我们提供了答案……
 
本文提出了如何使用UML和用例分析技术进行面向构件的分析与设计。在一些大型的项目开发环境中,由于各开发设计人员的经验不一,采用通用的标准的方法来进行需求分析……
本技术手册旨在探讨如何为封装WS-BPEL流程逻辑所需的Web服务设计WSDL定义。因为SOA提倡用“契约优先”的方式来设计服务,所以理解由WS-BPEL引发的这种独特服务契约设计理念,是成功构建有效流程和服务的关键因素。
本专题分六部分探讨SOA设计模式,当初设计面向服务架构的一大初衷就是降低服务间耦合度,由此提高服务的灵活性和自由度。
本专题分六部分探讨服务定向原则,主要探讨如何将服务定向原则应用于构成服务的自动化逻辑。如何越过单个服务层面,应用作为范例的服务定向并形成能够封装整个企业领域的服务层。
最新更新
专家答疑
技巧
Eric Newcomer
是否存在某些经验法则,让人们在网络互操作性和进程互操作性二者之间做出选择?换句话说,如果我遇到吞吐量问题,是不是就不该选择Web服务了?
Jason Bloomberg
评价“企业mashups”的标准是什么?尤其是在企业mashups和“主机包装”项目的关系上?我们对企业mashups的定义是:丰富网络环境下,一套建立在SOA基础之上的组合……
Rami Jaamour
你能解释一下什么是回归测试吗?怎样才能保证你的回归测试是正确的呢?回归测试旨在揭示所有由软件修改所引起的回归,在当今复杂多变的商业环境下……

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
登录Email
请输入您的登录Email
密码
下次自动登录