3

データを取得して 1 日に 1 回データベースに格納するアプリケーションがあります。最近まで、このアプリケーションは SQL サーバーと同じマシンに常駐していましたが、必要な周辺機器の一部にハードウェアの問題があるため、Windows XP を実行する別のマシンに移動されました。

ここでの問題は、朝の最初のトランザクションが実行されると、次のスタック トレースを受け取ることです。

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

ただし、すぐにトランザクションを再実行すると成功します。MSDTC が最初のトランザクションに応答するのに時間がかかりすぎて失敗しているように見えますが、2 番目のトランザクションの準備ができています。インターネット上でこれが発生していることについての言及をいくつか見つけましたが、実際の解決策は見つかりませんでした。誰かがこれに遭遇しましたか?その場合、MSDTC がメモリからアンロードされないようにする方法はありますか、またはタイムアウトを延長するなどの別の解決策はありますか?

4

6 に答える 6

1

みんなありがとう、

ご記入いただくだけで、dcom 構成を変更して SQL サーバーにあるリモート コーディネーターを使用することで問題を解決しました。これまでのところ、それ以上の問題は発生していません。

于 2009-08-06T21:52:47.767 に答える
0

テスト環境でも同様の問題が発生しました。非アクティブ状態が 10 分間続いた後に発生した最初のトランザクションは、「基になるトランザクション マネージャーとの通信に失敗しました」というエラーで失敗しました。
調査の結果、MSDTC 接続がキャンセルされ、必要な時間内に確立できなかったと結論付けました (この操作のデフォルトのタイムアウトは 4 秒のようです)。この問題を解決するために、クライアント コンピューターがサーバー コンピューターからのバインド パケット応答を待機する時間を延長しました。これは、クライアント コンピューターのレジストリにキーを追加することによって行われます: http://support2.microsoft.com/?id=922430

于 2015-02-18T12:45:57.747 に答える
0

最初に、関連するすべてのマシンのイベント ログを調べて、他に何があるかを確認することをお勧めします。あなたは何が起こっているかについて推測しています。それは良い仮定かもしれませんが、変更を加える前に調べることをお勧めします。

また、この質問を ServerFault に移すプロセスを開始する予定です。おそらく、より迅速な回答が得られるでしょう。時間がかかりすぎる場合 (5 人が投票する必要がある場合) は、手動で質問することをお勧めします。もしそうなら、元の(そしてリンクを過ぎた)ものはおそらくその途中であることを示してください.

于 2009-08-05T01:47:15.583 に答える
0

確認すべきことの 1 つ (それが問題の原因ではない可能性があります) は、クライアントの IP での逆引き DNS ルックアップが実際にクライアント マシンを参照する名前に解決されることを確認することです。IP が複数の名前に一致する DNS/DHCP セットアップに問題がありました。MSDTC のリモート エンドがクライアント上の MSDTC に接続しようとしたときに、別のマシンに接続しようとしていました。

これは、(一見ランダムな) トランザクション タイムアウトとして現れます。

于 2009-08-05T01:47:38.733 に答える
0

親愛なる私たちも同じ問題に直面しています。あるデータベースから別のデータベース (構造が異なる) にデータを移行しており、Subsonicを使用してプロセスを高速化していました。トランザクションとSharedDbConnectionScopeオブジェクトを使用しましたが、 XP SP3を実行しているマシンでも同様に失敗しました。SP3 には、Vista、2003、および 2008 サーバーで正常に動作しているため、いくつかの更新があると思います。

編集:これは、同じ問題について説明しているMSDN KB 記事です。

于 2009-08-05T01:48:32.367 に答える
0

DTC で 30 分ごとにトランザクションを開始してコミットするだけのプロセスを実行してみてはいかがでしょうか。

于 2009-08-05T01:49:15.940 に答える