問題は、TransactionScope を使用するスタンドアロン Web サーバー (Windows 2003 SP2 - マシン名は TESTAPP で、以下のログで確認できる) に Web サイトがあることです。
SQL Server 2008 R2 マシン (Windows Server 2008) はドメイン内にあります。
スタンドアロン マシンが TransactionScope にヒットすると、失敗します (エラーの詳細が表示されます)。
DB サーバーと同じドメイン内のマシンからコードを実行すると、正常に動作します。
スタンドアロン マシンでは、次のようなエラーが頻繁に発生します。
Error HRESULT E_FAIL has been returned from a call to a COM component.
ただし、MSDTC は正しくセットアップされていますが、ネットワーク サービスを使用しています。DTCPing.exe はどちらの方法でも問題なく動作します。
DB マシンを掘り下げると、次の監査エラーが見つかりました。
アカウントのログオンに失敗しました。
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 サーバーに使用していることです。:S
PPS ファイアウォールは両方のマシンでオフになっています。