.Net2.0的TransactionScope类让事务处理更简单,更轻量级。但最近确遇到一个问题,在打开数据库连接的时候抛出“事务已显示提交或终止”或者“与基础事务管理器通信失败”的异常。刚开始还以为是.Net Remoting穿透防火墙存在安全性问题,但后来写了一个控制台的测试程序也是同样问题。
经测试有以下几种情况:
1.不加事务正常
2.数据库和应用程序在同一机器时正常
3.如果数据库是sql2000的,在打开第一个连接的时候就抛出异常;如果数据库是sql 2005则在打开第二个连接时才抛异常。(这就是sql2005的自动提升事务级别而与sql2000产生的区别)
4.如果是用企业服务EnterpriseServices的自动事务也提示同样的问题。
5.rpcping提示无法链接到服务器。
初步判断是安全设置问题,但是网上资料非常少,苦苦找寻1周,未见起色。但在一个偶然的事件中,让我发现了一点问题线索,顺着这条线索寻找,终于发现了问题的所在。
造成这个问题出现的是一次自动更新,还是个安全更新。这个更新为kb935348,属于中度安全更新。这个更新可能会造成一些莫名其妙的权限问题,如:无法使用 网络设置 。
该死的安全更新!!!!
这里还是推荐大家把xp的系统还原监视打开,以免出现问题后无法处理。
下面说一下分布式事务在XP系统中配置的一般方法: