2006-06-26

λ [.NET] ASP.NET で System.Transactions を利用する場合、MSDTC のネットワークアクセスを有効にしないとエラーが発生する

Windows Server 2003 または Windows XP Service Pack 2 のインストール後、リンク サーバーに対して分散トランザクションを実行すると SQL Server 2000 でエラー メッセージ 7391 が表示される にネットワーク DTC アクセスを有効にする方法が記述されている。XP SP2 の場合ファイアウォールの設定が必要なところがポイント。

ローカルにあるSQL Server(SQL Express) で開発をしていると、ネットワーク DTC アクセスは不要なので、発見が遅れてあとからはまることになるので注意。

Windows Server 2003 の場合は、Windows コンポーネントの追加と削除でネットワーク DTC アクセスを有効にできる

ちなみに出て来たエラーメッセージとしては以下の2種類が確認できた。後者はファイアウォール設定により通信に失敗したときのメッセージ。

System.Transactions.TransactionManagerCommunicationException: 分散トランザクション マネージャ (MSDTC) のネットワーク アクセスは無効になっています。 コンポーネント サービス管理ツールを使用して、MSDTC のセキュリティ構成でネットワーク アクセスの DTC を有効にしてください。 --->  System.Runtime.InteropServices.COMException: トランザクション マネージャにより、リモート トランザクションまたはネットワーク トランザクションのサポートが無効にされました。 (HRESULT からの例外: 0x8004D024)。

System.Transactions.TransactionManagerCommunicationException: 基本トランザクション マネージャとの通信が失敗しました。 --->  System.Runtime.InteropServices.COMException: エラー HRESULT E_FAIL が COM コンポーネントの呼び出しから返されました。。

認証は、ドメインに参加したマシン同士であれば、自動的になんとかしてくれる。 そうでない場合はNetwork Serviceのパスワードを合わせるとか? MSDTC の認証関係のドキュメントは読み込んでいない。

Windowsファイアウォールは、ポート制限解除だけではなく、プログラムに対する制限解除ができるというのがよい。

本日のツッコミ(全1件) [ツッコミを入れる]
λ 108bones (2006-06-29 23:21)

こんばんわー。偶然にも同じような記事をいま書こうとしている。。w
PASSJから見に来ました。参考にさせていただきます。

[]