微软WCF服务的事务

 
   | |

导读:微软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    
 
 
 
 
 

热门技术手册排行

 

随着开源技术越来越成熟,一个稍有开发经验的人通过学习就可以用开源的产品和技术构建一套可用的系统。对于从事软件开发的人员,尤其是对Java或动态语言相关领域的人来说,“开源”也许是他们最喜爱的单词。但是,很多时候我们需要的不仅仅是一个可用的系统,而是希望这个系统开发更简易、性能更高和扩展性更好等。这确实是一个令人头痛的问题。本指南很多地方都是点到为止,要深入了解相关信息的读者请借助参考资料、网站等自行挖掘。

 

本专题分六部分探讨SOA设计模式,当初设计面向服务架构的一大初衷就是降低服务间耦合度,由此提高服务的灵活性和自由度。

 

业务流程管理(business process management,bpm)不是一个新概念,甚至不是一个新名词。它是从相关的业务流程变革领域,如业务流程改进(bpi)、业务流程重组(bpr)、业务流程革新中发展起来的。流程管理技术也是从早期的工作流管理、eai、流程自动化、流程集成、流程建模、流程优化等技术中发展起来的。

 

TOAGF是一个架构框架,简而言之,TOGAF是一种协助发展,验收,运行,使用,和维护架构的工具。它是基于一个迭代(Iterative)的过程模型,支持最佳实践和一套可重用的现有架构资产。

 

云计算的概念越来越流行,Amazon、Google和IBM是第一批将云计算引入公众视线的公司。云计算就是新的Web2.0,一种既有技术上的市场绽放。

 

Mashup是一个非常cool的新的应用程序种类。如果你想真正的了解它们,我们需要回过头来看看你现在的计算机,其实它就是一个非常好的帮助你理解mashup的模型。现在开源的操作系统无疑是非常好的apis的集合或应用程序编程接口,帮助开发者去构建其应用程序。计算机本身也是一个很好的为用户提供接口的例子,键盘和鼠标可以被理解为你通过计算机的接口而使用的不同的应用程序。本技术手册为读者提供了一些相关信息,如果需要深入了解mashup,读者可以借助其他参考资源。

查看更多
 
 

登录TechTarget中国

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