问题是我们在独立的网络服务器上有一个网站(Windows 2003 SP2 - 机器名称是 TESTAPP,可以在下面的日志中找到),它使用 TransactionScope。
SQL Server 2008 R2 机器 (Windows Server 2008) 在域内。
当独立机器命中 TransactionScope 时,它会失败(将出现错误详细信息)。
当我从与数据库服务器位于同一域中的机器上运行代码时,它工作正常。
在独立机器上,我得到普遍存在的错误:
Error HRESULT E_FAIL has been returned from a call to a COM component.
但是 MSDTC 设置正确,顺便说一下,它使用网络服务。DTCPing.exe 两种方式都可以正常工作。
在深入研究数据库机器后,我发现了以下审计失败:
帐户无法登录。
Subject:
Security ID: NULL SID
Account Name: -
Account Domain: -
Logon ID: 0x0
Logon Type: 3
Account For Which Logon Failed:
Security ID: NULL SID
Account Name: TESTAPP$
Account Domain: WORKGROUP
Failure Information:
Failure Reason: Unknown user name or bad password.
Status: 0xc000006d
Sub Status: 0xc0000064
Network Information:
Workstation Name: TESTAPP
Source Network Address: 192.168.**.**
Source Port: 1202
独立机器正在尝试使用它自己的机器名称登录到 SQL Server 机器,天知道它使用什么作为密码。
因此,是否有可能让 MSDTC 从独立机器工作到域机器?
PS 如果可能(如果有其他方法)我不想影响 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\TurnOffRpcSecurity' 注册表项。
PPS 如果可能的话,我想在 MSDTC 上保留相互身份验证,(我知道可能的解决方案是将 MSDTC 设置为不需要身份验证,但不确定这是否完全必要)
奇怪的是使用测试独立 Web 服务器到域 DB 服务器 MSDTC 无论设置为无身份验证还是相互身份验证都可以正常工作!:S
两台机器上的 PPS 防火墙均已关闭。