在 Windows2003 中启用分布式事务遇到的部分问题
2015-07-12 12:34
309 查看
在 windows 2003 中启用分布式事务时候经常会遇到很多乱七八糟的问题,比如:
* 失去了与事务管理器的连接。
* 服务器 '%Server%' 上的 MSDTC 不可用。
* 该伙伴事务管理器已经禁止了它对远程/网络事务的支持。
* 还有最bt的就是:此事务已明地或暗地被确认或终止。
* ....
下面将我的经验介绍给大家,欢迎大家一起讨论。
我在测试的时候,数据库是单独的一台机器,也碰到了上述部分问题。在解决问题的过程中,我在 google 和 MSDN 上搜索了很长时间,找到的文章倒是提出了很多解决方法,其中讲述的比较详细的文章有:
* HOWTO: Enable DTC Between Web Servers and SQL Servers Running Windows Server 2003
* INFO: Configuring Microsoft Distributed Transaction Coordinator (DTC) to Work Through a Firewall
* 解决“COM+ 无法与 Microsoft 分布式事务协调程序交谈”的问题
上述讲述的方法主要包括:
* 在“添加或删除程序”的“添加/删除 Windows 组件”中安装“启用网路 DTC 访问”
* 启用 NETBIOS 访问
* 在 Sql Server 服务器上禁用 MSDTC 服务的 Rpc Security
* 等等...
可是,在尝试了上述方法后还是同样的报错。真是像网上说的“被 COM+ 给彻底打败了”。
然后,我进行了以下的尝试:
* 在命令行下运行 msdtc -uninstall,删除 msdtc(Distributed Transaction Coordinator)服务
* 在“本地连接”的属性中删除了 NetBIOS 协议
* 重新启动机器后,在命令行下运行 msdtc -install,安装 msdtc 服务。
Note: 以上步骤在数据库服务器和代码运行机器上相同。
* 在数据库服务器上,在“组件服务”mmc中,依次打开“组件服务”、“计算机”,在“我的电脑”上点右键选择“属性”。 然后选择“msdtc”选项卡中的“安全配置”,确认选中“网络 DTC 访问”,并选择“不要求进行验证”。
然后再次尝试运行代码,一切都顺利通过 :) 。
之所以要选择“不要求进行验证”,是因为我发现在“系统”日志中有 DCOM 的错误信息:
启动 DCOM 服务器的访问被拒绝。 服务器是: {00020906-0000-0000-C000-000000000046}
用户是 ANONYMOUS LOGON/NT AUTHORITY, SID=S-1-5-7.
但是选择不进行验证,肯定不是一个很好的解决方案。还有没有更好的解决方案,还望大家不吝赐教!
在 windows 2003 中启用分布式事务时候经常会遇到很多乱七八糟的问题,比如:
* 失去了与事务管理器的连接。
* 服务器 '%Server%' 上的 MSDTC 不可用。
* 该伙伴事务管理器已经禁止了它对远程/网络事务的支持。
* 还有最bt的就是:此事务已明地或暗地被确认或终止。
* ....
下面将我的经验介绍给大家,欢迎大家一起讨论。
我在测试的时候,数据库是单独的一台机器,也碰到了上述部分问题。在解决问题的过程中,我在 google 和 MSDN 上搜索了很长时间,找到的文章倒是提出了很多解决方法,其中讲述的比较详细的文章有:
* HOWTO: Enable DTC Between Web Servers and SQL Servers Running Windows Server 2003
* INFO: Configuring Microsoft Distributed Transaction Coordinator (DTC) to Work Through a Firewall
* 解决“COM+ 无法与 Microsoft 分布式事务协调程序交谈”的问题
上述讲述的方法主要包括:
* 在“添加或删除程序”的“添加/删除 Windows 组件”中安装“启用网路 DTC 访问”
* 启用 NETBIOS 访问
* 在 Sql Server 服务器上禁用 MSDTC 服务的 Rpc Security
* 等等...
可是,在尝试了上述方法后还是同样的报错。真是像网上说的“被 COM+ 给彻底打败了”。
然后,我进行了以下的尝试:
* 在命令行下运行 msdtc -uninstall,删除 msdtc(Distributed Transaction Coordinator)服务
* 在“本地连接”的属性中删除了 NetBIOS 协议
* 重新启动机器后,在命令行下运行 msdtc -install,安装 msdtc 服务。
Note: 以上步骤在数据库服务器和代码运行机器上相同。
* 在数据库服务器上,在“组件服务”mmc中,依次打开“组件服务”、“计算机”,在“我的电脑”上点右键选择“属性”。 然后选择“msdtc”选项卡中的“安全配置”,确认选中“网络 DTC 访问”,并选择“不要求进行验证”。
然后再次尝试运行代码,一切都顺利通过 :) 。
之所以要选择“不要求进行验证”,是因为我发现在“系统”日志中有 DCOM 的错误信息:
启动 DCOM 服务器的访问被拒绝。 服务器是: {00020906-0000-0000-C000-000000000046}
用户是 ANONYMOUS LOGON/NT AUTHORITY, SID=S-1-5-7.
但是选择不进行验证,肯定不是一个很好的解决方案。还有没有更好的解决方案,还望大家不吝赐教!
相关文章推荐
- host文件
- 字符串 HDU 1039
- 黑马程序员——JAVA基础---数组
- TAIL Queue数据结构
- 【SQL】——行列转换
- 通过内存盘提高MSMQ的消息吞吐能力
- Android开源框架spots-dialog-master的使用
- 关于启用php_curl.dll后PHP Warning: PHP Startup: in Unknown on line 0之烦恼~~
- C#二进制字节数组操作功能 拦截字节数组SubByte
- RocketMQ-04安装
- 使用轻量级ORM Dapper进行增删改查
- c#分页工具类,完美实现List分页
- [Effective Java]第六章 枚举和注解
- ZOJ-3822-Domination【概率dp】【2014牡丹江赛区】
- java_小技巧札记
- 开发中题目太长怎样实现把鼠标放上去就浮动看全标题
- IIS 未能从程序集“System.ServiceModel, Version=3.0.0.0, Culture=neutral,
- 《社会化营销:人人参与的营销力量》—— 读后总结
- Controller的生命周期是Transient还是PerWebRequest?
- struts2之constant 讲解 (转)