关于TransactionScope 使用

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

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

 

二、代码实例

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

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不能跨域(如果跨域,目前微软还没有确切的解决方案);

 

posted @ 2015-02-26 09:59  余粮  阅读(3815)  评论(0编辑  收藏  举报