如果在C#中使用TransactionScope类(分布式事务),则须注意如下事项:
1、在项目中引用using System.Transactions命名空间(先要在添加net组件的引用);

2、具体示例如下:
   /// <summary>
        /// 发送消息
         /// </summary>
        /// <param name="sendUserId"></param>
        /// <param name="toUser">格式7FFA3AF2-E74B-4174-8403-5010C53E49A7|userName,7FFA3AF2-E74B-4174-8403-5010C53E49A7|userName</param>
        /// <param name="content"></param>
        /// <param name="sendedStatus">表示已送</param>
         /// <returns></returns>
        public static int sendMessage(string sendUserId, string toUser, string content, string sendedStatus)
        {           
            int receiveCount = 0;
            TransactionOptions transactionOption = new TransactionOptions();

            //设置事务隔离级别
            transactionOption.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;

            // 设置事务超时时间为60秒
            transactionOption.Timeout = new TimeSpan(0, 0, 60);

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transactionOption))
            {
                try
                {
                    //在这里实现事务性工作
     //发送消息
                    insertMessage(sendUserId, toUser, content, sendedStatus);

     //在接收信息表中插入记录
                    receiveCount += insertReceiveMessage(userids[0], sendUserId, content, "0");
                   
                    // 没有错误,提交事务
                    scope.Complete();
                 }
                catch (Exception ex) {
                    throw new Exception("发送信息异常,原因:"+ex.Message);
                 }finally{
                    //释放资源
                    scope.Dispose();
                  }                               
             }
            return receiveCount;
         }

3、对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

4、重启IIS服务器。

TransactionScope类的使用的更多相关文章

  1. 基于TransactionScope类的分布式隐式事务

    System.Transactions 命名空间中除了上一节中提到的基于 Transaction 类的显式编程模型,还提供使用 TransactionScope 类的隐式编程模型,它与显示编程模型相比 ...

  2. 微软的TransactionScope类是个好玩意

    最近发现微软自带的TransactionScope(.Net Framework 2之后)是个好东东,提供的功能也很强大. 首先说说TransactionScope是什么,并能为我们做什么事情.其实看 ...

  3. TransactionScope类

    命名空间:System.Transactons MSDN解释:使代码块成为事务性代码,此类不能被继承. 百度空间:在项目中引用using System.Transaction命名空间.在using 中 ...

  4. C# TransactionScope 事务类

    微软自带的TransactionScope(.Net Framework 2之后)是个好东东,提供的功能也很强大. 首先说说TransactionScope是什么,并能为我们做什么事情.其实看Tran ...

  5. C#中TransactionScope的使用方法和原理

    在.net 1.1的时代,还没有TransactionScope类,因此很多关于事务的处理,都交给了SqlTransaction和SqlConnection,每个Transaction是基于每个Con ...

  6. 转:C#中TransactionScope的使用方法和原理

    在.net 1.1的时代,还没有TransactionScope类,因此很多关于事务的处理,都交给了SqlTransaction和SqlConnection,每个Transaction是基于每个Con ...

  7. TransactionScope使用说明

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

  8. 导入Excel的时候使用TransactionScope事务控制来进行数据

    最近,项目需要将Excel里面的数据导入到数据库里面,但是由于Excel里面的数据的合法性和数据格式的不确定性.所以不可能每读出一条数据,就保存到数据库中. 这就使用到了TransactionScop ...

  9. TransactionScope事务对多个数据库的操作

    .Net 2.0引入了轻量级事务管理器(Lighweight Transaction Manager),即System.Transactions.TransactionManager. 轻量级事务管理 ...

随机推荐

  1. oracle数据库从入门到精通之三

    综合案例ddl&dml有一个商品数据库1.数据表的创建    ddl先编写数据库脚本--删除数据表drop table purcase purge;drop table product pur ...

  2. sqlalchemy 实体属性提前加载

    在flask里需要给视图传送数据,肯定需要把模型的实体属性提前加载,可以使用 sqlalchemy.orm.subqueryload 或 sqlalchemy.orm.joinedload 示例: @ ...

  3. python logging bydate

    #!/usr/bin/env python #_*_coding:utf-8_*_ # vim : set expandtab ts=4 sw=4 sts=4 tw=100 : import logg ...

  4. IOS-细节错误

    当页面显示时一直奔溃,错误提示-[UICachedDeviceWhiteColor pointSize]: unrecognized selector sent to instance 原因是设置导航 ...

  5. spring mvc 用freemarker实现/user/edit?id=${id}=${type} 的替换

    java 中实现/user/edit?id=${id}=${type} 的替换; 引入包: freemark.jar  ,以及 类代码如下: public class FreeMarkerTextTe ...

  6. HDU2896 病毒侵袭

    题目大意:给出若干病毒的特征码,不超过500个.每个病毒的特征码长度在20~200之间.现在有若干网站的源代码,要检测网站的源代码中是否包含病毒.网站的个数不超过1000个,每个网站的源代码长度在70 ...

  7. Web性能测试工具JMeter

    做Web方面的黑盒测试,也就是功能测试,基本不需要什么测试工具,都是直接打开浏览器访问,点一点界面就行. 现在流行的移动互联网应用,客户端和服务端的开发是分离的,两者开发进度肯定不一样,可能存在服务端 ...

  8. android 学习第一天 了解事件机制,页面跳转等常用操作

    点击时间2种 第一种,通过初始化页面 写入点击事件 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedI ...

  9. Ubuntu下,python输出中文

    python教程里说,如果要输出非英语文本就加前缀u或U, 例如: print u"你好啊,祖国" print u"こんにちは.私はとてもいいです" 结果会报错 ...

  10. MYSQL 锁机制 分析

    MySQL的表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table WriteLock).MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执 ...