由于各种原因,新服务器未运行Windows或sql Server的最新版本.
建立
应用服务器
>操作系统:Windows Server 2008 R2
> NetBIOS名称:WEB-02
>配置为与多个数据库服务器通信,一些是本地的,一些是远程的.
> DCOM端口限制在5000-5020范围内,用于通过防火墙与远程服务器进行通信.
>启用Windows防火墙
> DTC属性
>选中网络DTC访问
>允许远程客户端,取消选中“允许远程管理”
>交易经理沟通
>允许入站,允许出站检查
>无需身份验证
>取消选中启用XA事务
>启用SNA LU 6.2事务已选中
新的数据库服务器
>操作系统:Windows Server 2008
> NetBIOS名称:DB-06
> sql Server 2005
> DCOM端口没有限制
>禁用Windows防火墙
> DTC属性
>选中网络DTC访问
>取消选中远程客户端,
>选中“远程管理”
>交易经理沟通
>允许入站,允许出站检查
>无需身份验证
>取消选中启用XA事务
>“启用SNA LU 6.2事务”不存在
现有的数据库服务器
>操作系统:Windows Server 2003 R2
> NetBIOS名称:DB-04
> sql Server 2005
> DCOM端口没有限制
>禁用Windows防火墙
> DTC属性
>选中网络DTC访问
>取消选中远程客户端,允许出站检查
>无需身份验证
>取消选中启用XA事务
>“启用SNA LU 6.2事务”不存在
所有三台服务器都属于同一个域,并且位于同一子网中.它们之间只有一个以太网交换机,没有路由器,硬件防火墙和安全设备.
问题
ASP.NET应用程序在应用程序服务器上运行,并在对现有数据库服务器(DB-04)执行事务时正常工作.对新数据库服务器(DB-06)执行相同步骤时,它会失败并报告错误消息:与基础事务管理器的通信失败.
故障排除步骤
我们在使用此应用程序之前已经看到此错误,这通常意味着未正确配置分布式事务处理协调器或防火墙正在干扰.过去,我使用DTCPing来排除故障并纠正任何错误.
但是,这次虽然DTCPing失败,但我无法确定问题的原因,因为现有的和新的数据库服务器似乎配置相同,但操作系统版本除外.
从应用程序服务器(WEB-02)到新数据库服务器(DB-06)运行测试时,以下内容来自DTCPing日志文件.请注意,我已更改IP地址和DNS名称.
从应用程序服务器上的日志文件
10-14,16:08:11.346-->Error(0x424) at clutil.cpp @256 10-14,16:08:11.346-->-->OpenCluster 10-14,16:08:11.346-->-->1060(The specified service does not exist as an installed service.) ++++++++++++++++++++++++++++++++++++++++++++++ DTCping 1.9 Report for WEB-02 ++++++++++++++++++++++++++++++++++++++++++++++ Firewall Port Settings: Port:5000-5020 RPC server is ready ++++++++++++Validating Remote Computer Name++++++++++++ 10-14,16:08:22.796-->Start DTC connection test Name Resolution: DB-06-->1.1.1.6-->s6.mydomain.com 10-14,16:08:22.812-->Start RPC test (WEB-02-->DB-06) RPC test Failed
10-14,16:07:46.128-->Error(0x424) at clutil.cpp @256 10-14,16:07:46.128-->-->OpenCluster 10-14,16:07:46.129-->-->1060(The specified service does not exist as an installed service.) ++++++++++++++++++++++++++++++++++++++++++++++ DTCping 1.9 Report for DB-06 ++++++++++++++++++++++++++++++++++++++++++++++ RPC server is ready 10-14,16:08:22.785-->RPC server:DB-06 received following information: Network Name: DB-06 Source Port: 56535 Partner LOG: WEB-022872.log Partner CID: 1ACD8780-9446-4E94-869D-6F1BDF787BBF
在数据库服务器上单击PING后,会将以下内容添加到日志文件中.在输出窗口中,在调用RPC方法和失败之间存在暂停,因此在超时后失败.
++++++++++++Validating Remote Computer Name++++++++++++ 10-14,16:13:18.924-->Start DTC connection test Name Resolution: Web-02-->1.1.1.2-->web-02.mydomain.com 10-14,16:13:18.933-->Start RPC test (DB-06-->Web-02) Problem:fail to invoke remote RPC method Error(0x6D9) at dtcping.cpp @303 -->RPC pinging exception -->1753(There are no more endpoints available from the endpoint mapper.) RPC test Failed
正如Troubleshooting MSDTC issues with the DTCPing tool在“错误消息4 – 端点映射器中没有更多端点”部分中所解释的那样,映射器实际上有更多端点.我在应用程序服务器(具有受限端口的服务器)上运行了netstat -an,它只使用了20个可用端口中的10个.
由于服务器具有可公共路由的IPv4地址,因此IPv6堆栈会自动创建“6to4”地址.这是一个特殊的IPv6地址,对应于计算机可公开路由的IPv4地址.它为机器自己的地址和共享集群地址执行此操作.缺陷是它以自己的名义在DNS中注册了6到4个地址.这与IPv4堆栈在同一台计算机上的工作方式不同.使用IPv4时,群集IP地址未在DNS中注册.
结果是当连接到新数据库服务器和数据库服务器的应用程序服务器尝试反向绑定到应用程序服务器时,它会看到应用程序服务器有IPv6地址并尝试使用其中一个地址进行连接.但是因为它使用了与集群IP地址相对应的6to4地址,集群中的另一台服务器将接收连接,并且由于该服务器上的DTC不期望反向绑定,因此失败.
现有的数据库服务器(Windows Server 2003 R2)不使用IPv6,因此没有遇到问题.
解决方案是禁用自动6to4地址生成.您可以通过组策略或使用以下命令行执行此操作:
netsh interface 6to4 set state disabled
要将其设置回来,您将运行以下命令:
netsh interface 6to4 set state default
要查看当前设置,请运行以下命令.在Windows 2008 R2 / Windows 7及更高版本中,它还将指示当前设置是否归因于组策略.
netsh interface 6to4 show state