在去年的项目中使用了TransactionScope,现在总结下TransactionScope的使用说明

一、TransactionScope是.Net Framework 2.0之后,新增了一个名称空间。它的用途是为数据库访问提供了一个“轻量级”[区别于:SqlTransaction]的事物。使用之前必须添加对 System.Transactions.dll 的引用。

二、代码实例

//设置事务隔离级别
transactionOption.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
// 设置事务超时时间为60秒
transactionOption.Timeout = new TimeSpan(0, 0, 60);

using (TransactionScope tran = new TransactionScope())
{

  try
                { tran.Complete(); }
                catch
                {}

}

三、在TransactionScope中默认的事务级别是Serializable,即在事务过程中,完全性锁表。别的进程不能查询,修改,新增,删除。这样会导致效率大大降低,虽然数据完整性很高。通常我们不需要那么

所有的事务级别如下:

成员名称 说明 

Chaos                      无法改写隔离级别更高的事务中的挂起的更改。  

ReadCommitted        不可以在事务期间读取可变数据,但是可以修改它。  

ReadUncommitted     可以在事务期间读取和修改可变数据。  

RepeatableRead        可以在事务期间读取可变数据,但是不可以修改。可以在事务期间添加新数据。  

Serializable               可以在事务期间读取可变数据,但是不可以修改,也不可以添加任何新数据。  

Snapshot                  可以读取可变数据。在事务修改数据之前,它验证在它最初读取数据之后另一个事务是否更改过这些数据。如果数据已被更新,则会引发错误。这样使事务可获取先前提交的数据值。

四、在C#中使用TransactionScope类(分布式事务),则须注意如下事项

1、在项目中引用using System.Transactions命名空间(先要在添加net组件的引用);

2、对MSDTC组件设置:

在控制面板--->管理工具--->服务 中,开启Distributed Transaction Coordinator 服务。

a、控制面板->管理工具->组件服务->计算机->我的电脑->右键->属性

b、选择MSDTC页, 确认"使用本地协调器"

c、点击下方"安全配置"按钮

d、勾选: "允许网络DTC访问","允许远程客户端","允许入站","允许出站","不要求进行身份验证".

e、对于数据库服务器端, 可选择"要求对呼叫方验证"

f、勾选:"启用事务Internet协议(TIP)事务"。

g、在双方防火墙中增加MSDTC.exe例外 可用命令行: netsh firewall set allowedprogram %windir%/system32/msdtc.exe MSDTC enable

3、重启IIS服务器。

五、使用分布式事务注意如下几点

1:确保参与事务的machine开启了分布式事务支持;

2:如果machine开启了防火墙,需要设置msdtc进程为例外;

3:参与事务的machine不能跨域(如果跨域,目前微软还没有确切的解决方案);

最新文章

  1. spring mvc + ehcache 利用注解实现缓存功能
  2. Filter
  3. SharePoint 开启网站匿名访问图文详解
  4. 准备使用 Office 365 中国版--购买
  5. Hibernate框架之入门案例
  6. IOS 应用 退出的一个小方法
  7. kali linux安装vm
  8. POI Excel导出样式设置
  9. 初探—KMP模式匹配算法
  10. 基于visual Studio2013解决C语言竞赛题之1004平均值
  11. iOS 将NSArray、NSDictionary转换为JSON格式进行网络传输
  12. javascript闭包的妙用——实现函数的重载
  13. Css Secret 案例全套
  14. 汇编语言 实验14 访问CMOS RAM
  15. 一统江湖的大前端(6)commander.js + inquirer.js——懒,才是第一生产力
  16. 关键字(3):order by/group by/having/where/sum/count(*)...查询结果筛选关键字
  17. Fundebug前端JavaScript插件更新至1.2.0
  18. VsCode语言设置为中文
  19. 701 D. As Fast As Possible
  20. C#编程(四十八)----------列表

热门文章

  1. (21)Oracle表查询进阶
  2. HDU5877Weak Pair
  3. java.sql.Timestamp类型
  4. HDU1421
  5. setOnFocusChangeListener的使用
  6. Android 网络编程 记录
  7. tomcat启动项目,起不起来
  8. AngularJS中选择样式
  9. 如何将.class文件反编译为.java文件
  10. 负载均衡情况下获取真实ip的方法