当事务遇到防火墙

mac2022-06-30  21

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上百实例源码以及开源项目
最新回复(0)