3

私は WCF トランザクションについて頭を悩ませようとしていますが、1 つの概念に苦労しています。の動作の違いは何ですか

TransactionFlow(TransactionFlowOption.Mandatory) 

OperationBehavior(TransactionScopeRequired = true)

ドキュメントからわかる限り、それらは同じことを達成するための2つの方法のようなものですが、実際には理解できません。

乾杯、

スティーブン

4

1 に答える 1

3

メソッドにトランザクション スコープが必要な場合、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 によって作成された同じトランザクションを採用します。途中で何かが失敗したり、トランザクションがコミットされなかったりすると、チェーン全体がロールバックされます。トランザクションがフローされなかった場合、各メソッドは独自に動作するトランザクションをスピンアップし、呼び出されている他のメソッドには影響しませんでした。

于 2012-07-11T20:19:04.803 に答える