私は WCF トランザクションについて頭を悩ませようとしていますが、1 つの概念に苦労しています。の動作の違いは何ですか
TransactionFlow(TransactionFlowOption.Mandatory)
と
OperationBehavior(TransactionScopeRequired = true)
ドキュメントからわかる限り、それらは同じことを達成するための2つの方法のようなものですが、実際には理解できません。
乾杯、
スティーブン
私は WCF トランザクションについて頭を悩ませようとしていますが、1 つの概念に苦労しています。の動作の違いは何ですか
TransactionFlow(TransactionFlowOption.Mandatory)
と
OperationBehavior(TransactionScopeRequired = true)
ドキュメントからわかる限り、それらは同じことを達成するための2つの方法のようなものですが、実際には理解できません。
乾杯、
スティーブン
メソッドにトランザクション スコープが必要な場合、WCF はトランザクションを作成してメソッドのロジックを実行します。トランザクション フローを使用すると、トランザクションを連鎖させることができるため、トランザクションを必要とする複数のサービス メソッドをすべて、個別のトランザクションではなく 1 つのトランザクションに結合できます。
次の簡単な設定を検討してください。
[OperationBehavior(TransactionScopeRequired = true)]
public void ServiceMethod1()
{
// Executes ServiceMethod2 and ServiceMethod3
}
[OperationBehavior(TransactionScopeRequired = true)]
[TransactionFlow(TransactionFlowOption.Mandatory)]
public void ServiceMethod2()
[OperationBehavior(TransactionScopeRequired = true)]
[TransactionFlow(TransactionFlowOption.Mandatory)]
public void ServiceMethod3()
ServiceMethod1 はトランザクションを必要とするため、WCF はトランザクションをスピンアップしてから、ServiceMethod2 と ServiceMethod3 を呼び出します。これらのサービスもトランザクションを必要としますが、フローされます。そのため、新しいトランザクションをスピンアップする代わりに、ServiceMethod1 によって作成された同じトランザクションを採用します。途中で何かが失敗したり、トランザクションがコミットされなかったりすると、チェーン全体がロールバックされます。トランザクションがフローされなかった場合、各メソッドは独自に動作するトランザクションをスピンアップし、呼び出されている他のメソッドには影響しませんでした。