转自:http://www.blogjava.net/Martin-Liu-Hai-Shi/articles/260286.html
如果在C#中使用TransactionScope类(分布式事务),则须注意如下事项:
1、在项目中引用using System.Transactions命名空间(先要在添加net组件的引用);
2、具体示例如下:
  
 /// <summary>
        /// <summary> /// 发送消息
        /// 发送消息 /// </summary>
         /// </summary> /// <param name="sendUserId"></param>
        /// <param name="sendUserId"></param> /// <param name="toUser">格式7FFA3AF2-E74B-4174-8403-5010C53E49A7|userName,7FFA3AF2-E74B-4174-8403-5010C53E49A7|userName</param>
        /// <param name="toUser">格式7FFA3AF2-E74B-4174-8403-5010C53E49A7|userName,7FFA3AF2-E74B-4174-8403-5010C53E49A7|userName</param> /// <param name="content"></param>
        /// <param name="content"></param> /// <param name="sendedStatus">表示已送</param>
        /// <param name="sendedStatus">表示已送</param> /// <returns></returns>
        /// <returns></returns> public static int sendMessage(string sendUserId, string toUser, string content, string sendedStatus)
        public static int sendMessage(string sendUserId, string toUser, string content, string sendedStatus) {
        {            int receiveCount = 0;
            int receiveCount = 0; TransactionOptions transactionOption = new TransactionOptions();
            TransactionOptions transactionOption = new TransactionOptions();
 //设置事务隔离级别
            //设置事务隔离级别 transactionOption.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            transactionOption.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
 // 设置事务超时时间为60秒
            // 设置事务超时时间为60秒 transactionOption.Timeout = new TimeSpan(0, 0, 60);
            transactionOption.Timeout = new TimeSpan(0, 0, 60);
 using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transactionOption))
            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transactionOption)) {
            { try
                try {
                { //在这里实现事务性工作
                    //在这里实现事务性工作 //发送消息
     //发送消息 insertMessage(sendUserId, toUser, content, sendedStatus);
                    insertMessage(sendUserId, toUser, content, sendedStatus);
 //在接收信息表中插入记录
     //在接收信息表中插入记录 receiveCount += insertReceiveMessage(userids[0], sendUserId, content, "0");
                    receiveCount += insertReceiveMessage(userids[0], sendUserId, content, "0"); 
                    // 没有错误,提交事务
                    // 没有错误,提交事务 scope.Complete();
                    scope.Complete(); }
                } catch (Exception ex) {
                catch (Exception ex) { throw new Exception("发送信息异常,原因:"+ex.Message);
                    throw new Exception("发送信息异常,原因:"+ex.Message); }finally{
                }finally{//释放资源
scope.Dispose();
}
 
                                }
            } return receiveCount;
            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服务器。
 
                     
                    
                 
                    
                 


 
             
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号