新しいレコードを作成し、同じデータベースを操作するデータベースから返された新しいレコード ID を使用して Web サービスを呼び出すデータベース トランザクションを実行するにはどうすればよいですか? もちろん、すべてのテーブルを同じ SQLConnection オブジェクトから直接更新することもできますが、Web サービス呼び出し内のロジックは変更される可能性があるため、コードで行った変更が、呼び出された Web サービスによって導入された変更と共に確実にコミットされるようにする必要があります。
2 に答える
Webサービスがデータベースを操作する責任を負っている場合は、Webサービスを拡張して、コードが実行しているアクションを実行します。Webサービスを使用するポイントは、データベースを直接処理する必要からコードを分離することです(そうあるべきです)。コードに直接DB操作を導入すると、物事がはるかに複雑になり、保守が難しくなります。
これは、実際のトランザクションで必要なことではありません。トランザクションはできるだけ短くする必要があります。つまり、トランザクションの途中でのユーザーの操作や、この場合は Web サービスの応答を待つ必要はありません。
問題に関しては、Web サービスを制御している場合は、Web サービスを変更して、トランザクション全体を実行するストアド プロシージャ コールを作成します。サービスが呼び出されるたびに完了しなければならないアクションがある場合、それらはサービスの一部である必要があります。
私の推測では、Web サービスを制御できないか、これは問題にならないでしょう。Web サービスはどのようにデータベースにアクセスしていますか? 既にストアド プロシージャを使用している場合は、そこに必要なロジックを追加できるはずです。繰り返しますが、そうではないか、問題にはならなかったと思います。私の提案は、可能であれば、そのアーキテクチャに合うように Web サービスを変更することです。
Web サービスがテーブルに直接アクセスすると仮定すると (yuck)、挿入を行うコードを呼び出しコードに挿入し、Web サービスを呼び出し、Web サービスが本来の動作を行ったかどうかを確認する必要があります。その場合、コードはすべてを元に戻すために必要なアクションを実行しませんでした。基本的には、自家製のトランザクション エンジンのようなものです。また、非常に面倒で、バグが発生しやすく、保守が困難になる傾向があります。言うまでもなく、100% 完全な証拠ではありません。