株式会社ロジステック株式会社ロジステック

By logistech

ASP.NET2.0 自動トランザクションのトラブルシュート

※ローカルの開発環境ならうまくいくのに、リモートのDBサーバーだとうまくいかないetcの場合

●トランザクションは既に暗黙的または明示的に、コミットまたは中止されています。 (HRESULT からの例外: 0x8004D00E) 

上記エラーの原因として、次の2つが考えられます。

1.クライアント側で、MSDTCのセキュリティ構成が受信できる状態になっていない可能性が考えられます。
2.ファイアウォールでMSDTCプログラムとポート135が許可されていない可能性があります。

1.クライアント側で、MSDTCのセキュリティ構成が受信できる状態になっていない可能性が考えられます。
下記手順に従いMSDTCを有効にします。
<対策>
a.  [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。  
b.  [ファイル名を指定して実行] ダイアログ ボックスで、[名前] ボックスに dcomcnfg.exe と入力し、[OK] をクリックします。  
c.  [コンポーネント サービス] ウィンドウで、[コンポーネント サービス]、[コンピュータ]、[マイ コンピュータ] を順に展開します。  
d.  [マイ コンピュータ] を右クリックし、[プロパティ] をクリックします。  
e.  [マイ コンピュータのプロパティ] ダイアログ ボックスの [MSDTC] タブをクリックし、[セキュリティの構成] をクリックします。  
f.  [セキュリティの構成] ダイアログ ボックスで、[ネットワーク DTC アクセス] チェック ボックスをオンにします。  
g.  このコンピュータで、リモート コンピュータからの分散トランザクションの実行を許可するには、[トランザクション マネージャ通信] の [受信を許可する] チェック ボックスをオンにします。  
h.  このコンピュータからリモート コンピュータでの分散トランザクションの実行を許可するには、[トランザクション マネージャ通信] の [送信を許可する] チェック ボックスをオンにします。  
i.  [トランザクション マネージャ通信] の [認証を必要としない] をクリックします。  
j.  [セキュリティの構成] ダイアログ ボックスで [OK] をクリックします。  
k.  [マイ コンピュータのプロパティ] ダイアログ ボックスで [OK] をクリックします。  


2.ファイアウォールでMSDTCプログラムとポート135が許可されていない可能性があります。
<対策>
下記手順に従いファイアウォールを設定します。

a.  [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。  
b.  [ファイル名を指定して実行] ダイアログ ボックスで、[名前] ボックスに Firewall.cpl と入力し、[OK] をクリックします。  
c.  クラシック表示のコントロール パネルでは、[Windows ファイアウォール] をダブルクリックします。  
d.  [Windows ファイアウォール] ダイアログ ボックスの [例外] タブをクリックし、[プログラムの追加] をクリックします。  
e.  [プログラムの追加] ダイアログ ボックスで、[参照] をクリックし、Msdtc.exe を見つけてダブルクリックします。このファイルは、デフォルトで :\Windows\System32 フォルダに置かれています。  
f.  [プログラムの追加] ダイアログ ボックスで [OK] をクリックします。  
g.  [Windows ファイアウォール] ダイアログ ボックスで、[プログラムおよびサービス] ボックスの一覧の [msdtc] チェック ボックスをオンにします。  
h.  [例外] タブの [ポートの追加] をクリックします。  
i.  [ポートの追加] ダイアログ ボックスで、[ポート番号] ボックスに 135 と入力し、[TCP] をクリックします。  
j.  [ポートの追加] ダイアログ ボックスで、[名前] ボックスに例外の名前を入力し、[OK] をクリックします。  
k.  [Windows ファイアウォール] ダイアログ ボックスの [プログラムおよびサービス] ボックスで、手順 j. で入力した例外の名前の横にあるチェック ボックスをオンにし、[OK] をクリックします。  


●パートナー トランザクション マネージャにより、リモート トランザクションまたはネットワーク トランザクションのサポートが無効にされました。 (HRESULT からの例外: 0x8004D025) 

DBサーバー側で、MSDTCのセキュリティ構成が受信できる状態になっていない可能性が考えられます。
上記1.に従い、MSDTCのセキュリティ設定を変更します。


●タイムアウトに達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。 
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。
DBそのものに接続できていません。下記原因等なんらかの障害が考えられます。
・DBサーバーが動作していない
・DBとの接続処理が正しくない
・ファイアウォールでDB接続が禁止されている

参考:http://support.microsoft.com/kb/839279
logistech
About logistech