3

異なるデータベースサーバー(MS SQL Server 2008)に2つのデータベースがあります。

2つのデータベースサーバーのそれぞれに1つずつ、合計2つのテーブルにデータを挿入する必要があります。また、すべてがトランザクション内にある必要があるため、分散トランザクションが必要です。

.NETプログラムからデータを挿入していますが、ここには2つのオプションがあると思います。

.NETでは、TransactionScopeクラスを使用して分散トランザクションを開始します。これはテスト環境の開発マシンで機能しましたが、ネットワークとの通信を許可するようにDTCを設定した後でのみです。ただし、.NETアプリは最終的にクライアントマシンで実行され、それに応じてオペレーティングシステムにDTCが設定されていない可能性があります。そして、彼らは「通常の」ユーザーであり、マシンに管理者はいません。

したがって、私の最初の質問は、DTCが設定されていない場合でも、コンピューター上の.NETでTransactionScopeクラスを使用できますか?.NETプログラムを介してプログラムでこれを回避する方法ですか?

.NETの方法が選択できない場合は、リンクサーバーを介して分散トランザクションを構築するストアドプロシージャを使用することをお勧めしますか?

返信ありがとうございます!

4

1 に答える 1

1

私の提案は、クライアントマシンのDTCに依存しないことです。DTCは、制御された環境、つまりサーバーで非常に役立ちます。これは、.NETとはまったく関係ありません(ネイティブCOM / ADOを実行している場合はそうなります)。技術的には機能する可能性がありますが、エンドユーザーのマシンで信頼できる方法でセットアップすることは困難です。さらに、サーバーのトランザクションパフォーマンスをクライアントマシン/セットアップの動作に深く結び付けたくはありません。

提案するように、「サービス指向」アプローチを使用して、分散された作業をクライアントから隠すファサードストアドプロシージャを作成することをお勧めします。言い換えると、サーバー間通信用にDTCを保持します。

于 2012-11-14T08:14:58.587 に答える