1

次の問題に直面しています。次のようなコードがあります。

DoSomething(){
  using (TransactionScope scope = new TransactionScope())
    {
      InsertSomething();
      InsertSomethingElse();
      InsertYetAnotherThing();
      ProcessDataRelatedWithThePreviousInserts();
      scope.Complete()
    }
}

ProcessDataRelatedWithThePreviousInserts で条件をチェックし、必要に応じて残りのワークフローを他のサーバーのメッセージ キューにリダイレクトします。もう一方のサーバーで、メッセージを回復し、ワークフローを続行します (基本的に、DoSomething メソッドの挿入に関連する挿入をいくつか行います)。

DoSomething メソッドで TransactionScope を削除した場合にのみ、これを行うことができるため、これは理論上です。やりたいことを達成する方法はありますか、それともトランザクションの処理方法を変更する必要がありますか?

4

1 に答える 1

0

すでに試しましたか

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
    // ...
    using (TransactionScope innerscope = new TransactionScope(TransactionScopeOption.Supress)
    {
        ProcessDataRelatedWithThePreviousInserts();
    }
    scope.Complete();
}

ProcessDataRelatedWithThePreviousInserts()への呼び出しの外部トランザクションを明示的に抑制します。

于 2010-02-24T17:13:42.570 に答える