私はトランザクションの範囲設定についてあまり取り組んだことがないので、深く入り込む前に、この考えに正しく取り組んでいることを確認したいと思います。
セットアップ/目標
- リモート システムにコピーするファイルのアイテムのリストがあります。
- そのリスト内の各ファイルに対して、次のトランザクションを作成する必要があります。
- ファイルをリモート システムにコピーする
- Web サービスを呼び出して、その新しいファイルへの参照をデータベースに追加します。
- Web サービス呼び出しまたはファイル コピーのいずれかが失敗した場合、両方のアクションをロールバックする必要があります。
- ファイル コピーをロールバックすると、リモート システム上のファイルが削除されます。
- Web サービス アクションをロールバックするということは、別の Web サービス メソッドを呼び出して、今作成したエントリを削除することを意味します。
- アイテムのリスト内のアイテムのいずれかが失敗した場合、何らかのメッセージを返したいと思いますが、他のアイテムのコミットを停止したくはありません。
私がやろうとしていること
このトピックに関する私の(非常に限られた)読書では、これが適切なアプローチかもしれないと思います:
- ファイル コピー用のリソース マネージャーを作成して、永続的なトランザクションに参加できるようにする
- 同じ方針に沿って、Web サービス呼び出し用のリソース マネージャーを作成します。
- リスト内の各項目に対して foreach ループを作成する
- アイテムごとに、2 つのリソース マネージャーを使用するトランザクション スコープを作成し、問題が発生した場合にロールバック/レポートします。
質問)
- ここに表示されていないものや、実装する必要がある新しい方法論はありますか?それとも、これが実際に進むべき道ですか?
これまでのリソース
問題を調べて頭を包み込もうとしているときに、これらは私が熟読しているページの一部です。
- リソース マネージャーの実装[MSDN]
- リソースをトランザクションの参加者として登録する[MSDN]
- TransactionScope を使用した暗黙的なトランザクションの実装[MSDN]
あなたが与えることができる助けを前もってありがとう!