WCF事务传播

目录

事务流配置

事务流和操作合同

环境事务

事务性服务编程

事务传播模式

客户端和服务事务

表决和完成

总结

事务是构建强大可靠、高质量的面向服务的应用程序的关键。Windows Communication Foundation 为服务开发人员提供了简单的声明性事务支持,使 您能够完全在服务的作用域之外配置诸如事务流和表决等参数。此外,Windows Communication Foundation 还允许客户端应用程序创建事务,并跨服务边界传 播它们。在本专栏中,我将详细介绍如何在 Windows Communication Foundation 中配置事务传播和表决,以及所产生的编程模型。

事务流配置

Windows Communication Foundation 可以跨服务边界传播事务。这使得服务 能够参与客户端的事务,并使客户端能够在同一事务中包含对多个服务的操作调 用。客户端本身可能是、也可能不是 Windows Communication Foundation 服务 。绑定和操作合同配置二者都会控制客户端事务是否传播给服务的决策。

对于能够将客户端的事务传播给服务(如果配置为这样做)的任何绑定,我 都称之为事务感知绑定。具体来说,只有 NetTcpBinding、 NetNamedPipeBinding、WSHttpBinding、WSDualHttpBinding 和 WSFederationHttpBinding 是事务感知绑定。默认情况下,事务感知绑定不传播 事务。原因是,像 Windows Communication Foundation 中的其他大多数绑定一 样,它是可选设置。

服务宿主或管理员必须显式同意接受可能来自跨组织或跨业务边界传入的事 务。若要传播事务,必须在服务宿主和客户端的绑定上都显式启用它。所有事务 感知绑定都提供布尔属性 TransactionFlow,其默认值为 False,如下所示:

public class NetTcpBinding : Binding,...
{
  public bool TransactionFlow {get;set;}
  //More members
}

若要启用传播,只需以编程方式或在宿主配置文件中将此属性设置为 True。 例如,使用配置文件时此代码片段将设置该属性:

<bindings>
  <netTcpBinding>
   <binding name = “TransactionalTCP” transactionFlow = “true” />
  </netTcpBinding>
</bindings>

注意,服务元数据中不会发布 TransactionFlow 属性的值。如果使用 Visual Studio 2005 生成客户端配置文件,则仍然需要手动启用事务流。

时间: 2024-09-15 18:07:40

WCF事务传播的相关文章

WCF分布式开发步步为赢(12):WCF事务机制(Transaction)和分布式事务编程

今天我们继续学习WCF分布式开发步步为赢系列的12节:WCF事务机制(Transaction)和分布式事务编程.众所周知,应用系统开发过程中,事务是一个重要的概念.它是保证数据与服务可靠性的重要机制.作为面向服务应用的开发平台,WCF也提供了对事物编程模型的支持..NET 2.0提供的System.Transactions类来开发事务应用程序.同样WCF也支持事务特性,WCF事务机制是什么,它与微软已有的技术如Microsoft 分布式事务协调器 (MSDTC)有何关系?与Enterpise S

WCF技术剖析之三十一: WCF事务编程[中篇]

[续<上篇>]通过将TransactionFlowAttribute特性应用在服务契约的某个操作之上,并指定相应的TransactionFlowOption枚举直,仅仅定义了事务流转的策略而已.或者说,通过这种方式确定对事物流转的一种意愿,客户端是否愿意将当前事务流出,服务端是否愿意接受流入的事务,可以通过TransactionFlowAttribute特性进行控制.所以说,服务操作上定义个TransactionFlowAttribute特性是是否进行事务流转的总开关,真正的事务传播是建立在T

WCF 技术剖析之三十三:你是否了解WCF事务框架体系内部的工作机制?[下篇]

[续<上篇>]TransactionFlow选项通过TransactionFlowAttribute这个操作契约写入绑定上下文,由事务绑定创建的事务信道获取该选项并以此作为首否对事务实施传播(发送或者接收)的依据.客户端事务信道通过TransactionFormatter对当前事务按照指定的事务处理协议进行格式化,并嵌入出栈消息:通过TransactionFormatter则从入栈消息中提取相应的数据重建事务.这就是事务流转实现的本质.整个WCF事务还有一个重要的步骤需要实现:如何将通过Ope

Spring五个事务隔离级别和七个事务传播行为

Spring五个事务隔离级别和七个事务传播行为 1. 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据. 2. 不可重复读 :是指在一个事务内,多次读同一数据.在这个事务还没有结束时,另外一个事务也访问该同一数据.那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的.这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不 可重复读.例如

WCF技术剖析之三十一:WCF事务编程[上篇]

WCF事务编程其实很简单,可以用三句话进行概括:通过服务契约决定事物流转(Transaction Flow)的策略:通过绑定实施事务的流转:通过服务行为控制事务的相关行为.本篇文章着重介绍如果通过TransactionFlowAttribute特性定义事务流转策略.  契约时是一种双边协定,是双方就某个关注点达成的一种共识.对于分布式事务的实现来讲,首先需要解决的是事务流转的问题,即事务将客户端的事务流向服务端.要解决事务流转的问题,需要在事务的发送方和接收方就流转问题达成共识,即双方采用相匹配

WCF技术剖析之三十一: WCF事务编程[下篇]

在WCF事务编程模型下,通过服务契约确定事务流转的策略(参阅<上篇>),通过事务绑定实施事务的流转(参阅<中篇>).但是,对于事务绑定接收到并成功创建的事务来说,服务操作的执行是否需要自动登记到该事务之中,以及服务操作采用怎样的提交方式,这就是服务端自己说了算了.正因为如此,WCF通过服务(操作)行为的形式定义事务的登记和提交(完成)方式. 一.事务的自动登记(Enlistment)与提交(完成) 在OperationBehaviorAttribute特性(其本身是一个操作行为)中

面试-spring事务传播属性有哪几种

问题描述 spring事务传播属性有哪几种 今天面试遇到的问题,spring事务传播属性有哪几种?常用的有哪些 解决方案 spring事务传播属性与隔离级别spring事务传播属性与隔离级别Spring 事务传播属性 解决方案二: 1.propagation_required spring默认的事务方式,如果当前存在事务,沿用当前事务,不存在事务,开启一个事务2.propagation_suports 以当前事务方式运行,当前没事务,不开启新的事务3.propagation_mandatory

实例详解EJB中的六大事务传播属性

要弄清楚这些问题,就要牵涉到事务传播属性的问题,EJB 中针对不同的情况提供了六种不同的事物传播属性 事务 (Transaction) 是访问并可能更新数据库中各种数据项的一个程序执行单元 (unit).在http://www.aliyun.com/zixun/aggregation/22.html">关系数据库中,一个事务可以是一条或一组 SQL 语句,甚至整个程序.它有通常被称为 ACID 的原子性(Atomicity).一致性(Consistency).隔离性(Isolation).

浅析spring事务传播级别

spring是一个开源的框架,Spring为简化企业级应用开发而生,使用Spring可以使简单的JavaBean实现以前只有EJB才能实现的功能.今天我们先避开spring核心IOC&AOP,浅谈一下spring的事务传播级别. 误区 spring由于事务是是通过service一层控制的,因此为了保证事务的安全和可控性,尽量不要将两个事务要求的方法进行相互调用. 想想看,spring身为一个伟大的,灵活的框架.它怎么可能在事务这么重要的功能上给我们挖坑呢 在最开始使用spring进行事务开发管理