DotNet2.0的TransactionScope类让事务处理更简单,更轻量级。但最近确遇到一个问题,是打开Windows2003或xp操作系统自带的防火墙时,在打开数据库连接的时候抛出“事务已显示提交或终止”的异常。刚开始还以为是.Net Remoting穿透防火墙存在安全性问题,但后来写了一个控制台的测试程序也是同样问题。经测试有以下几种情况:1.没有打开防火墙一切正常2.打开防火墙但不加事务正常3.数据库和应用程序在同一机器时正常4.如果数据库是sql2000的,在打开第一个连接的时候就抛出异常;如果数据库是sql 2005则在打开第二个连接时才抛异常5.如果是用企业服务EnterpriseServices的自动事务也没有问题初步判断是因为防火墙阻止msdtc端口通讯的问题,但msdtc好像是动态端口?可能异常信息描述的不是很详细,自己用测试代码一跑就很清楚。附测试代码using System;using System.Collections.Generic;using System.Text;using System.Data.SqlClient;
namespace TransactionScopeProject{ class Program { static void Main(string[] args) { BusinessOperation bo = new BusinessOperation(); bo.Add();
Console.WriteLine("press enter to exit"); Console.Read(); } }
class BusinessOperation { public void Add() { using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope()) { Do1();
Do2(); } }
private void Do1() { string connectString = "server=192.168.1.110;uid=sa;pwd=;database=www.szguoguo.com"; using (SqlConnection conn = new SqlConnection(connectString)) { conn.Open(); } }
private void Do2() { string connectString = "server=192.168.1.110;uid=sa;pwd=;database=www.szguoguo.com"; using (SqlConnection conn = new SqlConnection(connectString)) { conn.Open(); } } }}开启Windows2003或xp自带防火墙的示意图注,我的测试环境是windows2003+SP1。MSDTC的设置如下:
转载于:https://www.cnblogs.com/hotsoho.net/archive/2006/12/20/598620.html
相关资源:JAVA上百实例源码以及开源项目