.Net下分布式事务处理的配置

一、业务需求

由于项目中用到了多个数据库,在业务逻辑层进行复杂业务处理时,需要同时调用DAO层的统一数据库或多个数据库的多个事务操作,因此需要添加业务逻辑层的事务处理。

二、解决方案

使用.NET Framework2.0中的事务处理类TransactionScope 类,在程序中需要添加事务处添加事务处理代码。

三、使用方式及源码

1、配置数据库服务器环境:
      1. “开始”菜单中,选择“运行”,输入“dcomcnfg”,回车。
      2. 展开“组件服务”对话框,选择“组件服务->计算机->我的电脑->Distributed Transaction Coordinator”,右击本地DTC属性,展开如下配置视窗。

配置如下:

clip_image001

2、配置开发服务器 MSDTC 以允许传出网络事务:

1从“开始”菜单中,选择“运行”,输入“dcomcnfg”,回车。

2展开“组件服务”对话框,选择“组件服务->计算机->我的电脑”,右击我的电脑属性,展开如下配置视窗。

      1. 在“MSDTC”选项卡上,单击“安全配置”,配置如下。

clip_image003

3、代码调用

(1)引入命名空间:System.Transactions。

(2)添加事务处理代码如下(只是一个测试实例)

using (TransactionScope scope = new TransactionScope()) 
          
{ 
              
string strCache = @"Data Source=192.168.128.33;Initial Catalog=MLEC_CACHE;Persist Security Info=True;User ID=sa;Password=admin_123456;connection reset=false;connection lifetime=50;min pool size=1;max pool size=500"; 
              
string strFormal = @"Data Source=192.168.128.33;Initial Catalog=MLEC_FORMAL;Persist Security Info=True;User ID=sa;Password=admin_123456;connection reset=false;connection lifetime=50;min pool size=1;max pool size=500"; 
              
string strSqlCache = "Update SalesMix Set prdDesVendor='bb' Where id=25"; 
              
string strSqlFormal = "Update SalesMix Set prdDesVendor='cc' Where id=27"; 
              
SqlConnection connCache = new SqlConnection( strCache ); 
              
SqlConnection connFormal = new SqlConnection( strFormal ); 

              
SqlCommand commandCache = new SqlCommand( strSqlCache, connCache ); 
              
SqlCommand commandFormal = new SqlCommand( strSqlFormal, connFormal ); 

              
try 
              
{ 
                  
connCache.Open(); 
                  
connFormal.Open(); 

                  
commandCache.ExecuteScalar(); 
                  
commandFormal.ExecuteScalar(); 

                  
connCache.Close(); 
                  
connFormal.Close(); 

                  
scope.Complete(); 
              
} 
              
catch (Exception) 
              
{ 
              
} 
              
finally 
              
{ 
                  
if (connCache.State != System.Data.ConnectionState.Closed) 
                  
{ 
                      
connCache.Close(); 
                  
} 
                  
if (connFormal.State != System.Data.ConnectionState.Closed) 
                  
{ 
                      
connFormal.Close(); 
                  
} 
              
} 

              
return 1; 
          
}

四、总结

使用上述方式代码调用方便简单,可以解决.Net程序中简单的的分布式事务处理问题(数据库服务器与应用程序服务器在同一域内,可以直接按照上述方式处理。如果在不同域内,还需要另外配置)。TransactionScope 还有许多可配置的属性,MSDN中有相关内容,在此不一一列举了。

posted @ 2010-12-02 13:51  天空是蓝的  阅读(1081)  评论(1编辑  收藏  举报