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

  • 相关阅读:
    论文赏析[EMNLP19]如何在Transformer中融入句法树信息?这里给出了一种解决方案
    论文赏析[TACL19]生成模型还在用自左向右的顺序?这篇论文教你如何自动推测最佳生成顺序
    论文赏析[ACL18]一个句子向量表示究竟可以塞进多少语言性质?
    论文赏析[EMNLP19]用控制任务来设计并解释探测任务
    [TACL18]隐式句法树模型真的能学到句子中有意义的结构吗?
    成分句法分析综述
    关于性能指标体系
    关于性能分析框架和性能监控平台
    关于Node.js安装及环境配置之Windows篇
    关于IntelliJ:idea取消启动时的默认工作空间,打开欢迎页面
  • 原文地址:https://www.cnblogs.com/liuyl/p/4300652.html
Copyright © 2020-2023  润新知