[WCF编程]12.事务:Transaction类
一、概述
.NET2.0在命名空间System.Transactions下提供了Transaction类,它表示所有.NET事务管理器使用的事务。
[Serializable]
public class Transaction : IDisposable, ISerializable
{
//......
public static Transaction Current { get; set; }
public void Dispose();
public void Rollback();
public void Rollback(Exception e); }Transaction类主要用来通过调用Rollback()方法手动终止事务。其它的功能包括添加资源管理器、设置隔离级别、订阅事务事件,为并发线程克隆事务,以及获取事务状态和其它信息。
二、环境事务
.NET 2.0定义了一个环境事务的概念,那就是代码执行的事务。要获取事务环境的引用,可以通过调用Transaction的Current属性。
Transaction ambientTransaction = Transaction.Current;如果没有环境事务,Curent就会返回null。无论是服务端,还是客户端的每段代码都可以获取环境事务。环境事务对象存储在线程本地存储里(TLS)。因此,当线程在相同的调用链上跨越多个对象和方法时,所有的对象和方法都可以访问它的环境事务。
客户端不能将已经终止的事务传递给服务端,强制传递会引发异常。
三、本地事务VS分布式事务
Transaction类可以用来处理本地和分布式事务。每个事务对象都有两个标识,一个是本地事务标识,另一个是分布式事务标识。可以通过访问Transaction类的TransactionInformation属性获得标识:
[Serializable]
public class Transaction : IDisposable, ISerializable
{
//......
public TransactionInformation TransactionInformation { get; }
}TransactionInformation属性为TransactionInformation类型,定义如下:
public class TransactionInformation
{
//......
public Guid DistributedIdentifier { get; }</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> LocalIdentifier { <span style="color: #0000ff">get</span><span style="color: #000000">; }
}
事务标识主要用作日志、跟踪和分析。
本地事务标识
本地事务标识(本地ID)包含了当前应用程序域里LTM的标识,也包含了一个枚举事务的序数。我们可以通过TransactionInformation的LocalIdentifier 属性访问到本地ID。事务本地ID在环境事务中可以一直使用,而且从不为null:只要有环境事务,他就会返回有效的本地ID。
本地ID包含两个部分:唯一标识应用程序域和当前应用程序域的LTM的GUID,另一个整数代表当前LTM管理的事务数。例如,如果服务跟踪了单个连续的事务,开始第一个调用,它会得到如下结果:
8957asc6-1das-42dd-5fe8-60df953f252f6:1
8957asc6-1das-42dd-5fe8-60df953f252f6:2
8957asc6-1das-42dd-5fe8-60df953f252f6:3
如果服务托管和客户端在同一个应用程序域里,它们就具有相同的GUID。如果客户端跨域调用,则客户端会获得一个标识自己局部LTM的GUID。
分布式事务标识
分布式事务标识(分布式ID)会在LTM或KTM提升为DTC事务时自动生成,如当环境事务流传播给其它服务时,可以通过TransactionInformation的DistributedIdentifier属性获得分布式事务ID。
分布式事务ID对于每个事务来说都是唯一的,不会有两个事务同时拥有相同的分布式ID。更重要的时,分布式ID在跨域服务边界和整个调用链时,其格式是不同的。因此,对于日志和跟踪十分有用。
注意,对于没有提升的事务来说,分布式ID的值为Guid.Empty。在客户端做哦为根事务,但是还没有发起调用时,这个值就是Guid.Empty;如果服务端没有使用客户端事务,这个值也是Guid.Empty。
[WCF编程]12.事务:Transaction类的更多相关文章
- [WCF编程]12.事务:事务协议与管理器
一.事务协议 总体来说,WCF开发人员不需要涉及事务协议与管理器.我们应该依赖WCF来选择相应的事务协议和管理器,重点关注业务逻辑的实现. WCF是根据事务范围里的参与个体来选择事务管理协议的.事务管 ...
- [WCF编程]12.事务:事务概述
一.事务概述 维护系统一致性和正确地处理错误恢复挑战的最佳方式是使用事务. 一个事务就是一个复杂操作的集合,这个集合中任何一个操作的失败都会引起整个集合的失败. 尽管在事务进行时系统被允许暂时出于不一 ...
- [WCF编程]12.事务:服务事务编程(下)
一.投票与提交 虽然WCF负责事务传播及两阶段提交协议的管理工作,但是 她不知道事务是否应该提交或终止.这需要根服务告诉WCF应该何时启动两阶段提交协议.是提交还是终止.WCF提供了两种编程模式来对事 ...
- [WCF编程]12.事务:服务事务编程(上)
一.设置环境事务 默认情况下,服务类和操作没有环境事务,即使客户端事务传播到服务端也是如此. 尽管强制事务流从客户端传播过来,但服务端的环境事务依旧为null.为了启用环境事务,每个操作必须告诉WCF ...
- [WCF编程]12.事务:事务传播
一.事务传播概述 WCF可以跨越服务边界传递事务.这可以让服务参与到客户端事务里,客户端还可以在同一个事务里调用多个服务.客户端本身不一定是WCF服务.客户端事务是否传播到服务端可以通过绑定和操作契约 ...
- 基于 Transaction 类的分布式显式事务
自.NET2.0以来增加了System.Transactions命名空间,为.NET应用程序带来了一个新的事务编程模型. 这个命名空间提供了几个依赖的TransactionXXX类.Transacti ...
- [WCF编程]3.WCF基础
一.服务 服务是一组公开功能的集合. 服务内部包含了如语言.技术.版本与框架等概念,服务之间的交互只允许使用规定的通信模式 外界客户端并不知道服务内部的实现细节,所以WCF服务通常通过元数据的方式描述 ...
- 【WCF--初入江湖】01 WCF编程概述
01 WCF编程概述 SOA的优点 1.服务独立于平台和工作环境.服务并不关心自己所处的环境,也不关心与之进行通信的服务所处的 环境. 2.服务相互隔离. 3.服务对协议.格式和传输中立. 4. ...
- Spring事务Transaction配置的五种注入方式详解
Spring事务Transaction配置的五种注入方式详解 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学 ...
随机推荐
- 浅谈Android应用保护(零):出发点和背景
近几年来,无线平台特别是Android平台的安全逐渐成为各厂商关注的重点.各种新的思路和玩法层出不穷.所以,笔者基于前一段时间的学习和整理,写了这系列关于Android应用安全和保护的文章. 这5篇文 ...
- 你必须知道的指针基础-4.sizeof计算数组长度与strcpy的安全性问题
一.使用sizeof计算数组长度 1.1 sizeof的基本使用 如果在作用域内,变量以数组形式声明,则可以使用sizeof求数组大小,下面一段代码展示了如何使用sizeof: ,,,,,}; int ...
- Sublime Text3 配置 NodeJs 环境
前言 大家都知道,Sublime Text 安装插件一般从 Package Control 中直接安装即可,当我安装 node js 插件时候,直接通过Package Control 安装,虽然插件安 ...
- SQL Server DDL触发器运用
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 基础知识(Rudimentary Knowledge) DDL运用场景(DDL Scene) ...
- WPF做验证码,小部分修改原作者内容
原文地址:http://www.cnblogs.com/tianguook/p/4142346.html 首先感谢aparche大牛的帖子,因为过两天可能要做个登录的页面,因此,需要用到验证码,从而看 ...
- Python 模块学习:os模块
一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.(一语中的) 二.常用方法 1.os.name 输出字符串指示正在使用的平台 ...
- ASP.NET MVC5 网站开发实践(二) Member区域–我的咨询列表及添加咨询
上次把咨询的架构搭好了,现在分两次来完成咨询:1.用户部分,2管理部分.这次实现用户部分,包含两个功能,查看我的咨询和进行咨询. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NE ...
- lintcode 落单的数(位操作)
题目1 落单的数 给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字. 链接:http://www.lintcode.com/zh-cn/problem/single ...
- ABZ理论
前言 身为著名的创业者+投资人,LinkedIn和Paypal的联合创始人Reid Hoffman有一个令我印象深刻的ABZ理论,他认为,你在任何时刻,手中都需要有三个计划:A计划.B计划和Z计划. ...
- Python标准库14 数据库 (sqlite3)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.S ...