[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的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学 ...
随机推荐
- 全新 Mac 安装指南(通用篇)(推荐设置、软件安装、推荐软件)
注:本文将会不定期维护与更新,有需要的朋友请在 Github 上订阅该条 Issues:<全新 Mac 安装指南(通用篇)>. 在 Mac 电脑上只用 Windows 操作系统的同学请看到 ...
- Python黑帽编程2.8 套接字编程
Python黑帽编程2.8 套接字编程 套接字编程在本系列教程中地位并不是很突出,但是我们观察网络应用,绝大多数都是基于Socket来做的,哪怕是绝大多数的木马程序也是如此.官方关于socket编程的 ...
- Base 64 编码
原创地址:http://www.cnblogs.com/jfzhu/p/4020097.html 转载请注明出处 (一)Encoding VS. Encryption 很多人都以为编码(Encodin ...
- spark参数调优
摘要 1.num-executors 2.executor-memory 3.executor-cores 4.driver-memory 5.spark.default.parallelism 6. ...
- Atitit 深入理解软件的本质 attilax总结 软件三原则"三次原则"是DRY原则和YAGNI原则的折
Atitit 深入理解软件的本质 attilax总结 软件三原则"三次原则"是DRY原则和YAGNI原则的折 1.1.1. 软件的本质:抽象 1 1.2. 软件开发的过程就是不断 ...
- C#设计模式-模板方法模式
提到模板,大家肯定不免想到生活中的“简历模板”.“论文模板”.“Word中模版文件”等,在现实生活中,模板的概念就是——有一个规定的格式,然后每个人都可以根据自己的需求或情况去更新它,例如简历模板,下 ...
- JAVAScript控制多个下拉框
方法:获取多选下拉框对象数组→循环判断option选项的selected属性(true为选中,false为未选中)→使用value属性取出选中项的值.实例演示如下: 这个东西我是在百度上查的,我为了方 ...
- Powershell 切换IE代理
买了一个穿越防火墙的代理,在 Windows 下每次手动设置代理都好麻烦,最后不断尝试 Powershell 来设置,最后也终于成功了. 其实利用 Powershell 来设置 IE 的代理,就是 ...
- GO语言的开源库
Indexes and search engines These sites provide indexes and search engines for Go packages: godoc.org ...
- 用pageGroup.js实现分页功能
1.html页面中 引入 <link rel="stylesheet" type="text/css" href="/stylesheets/p ...