1

次のような暗黙のトランザクションを作成しました。

Using ts As New TransactionScope(TransactionScopeOption.Required, New TimeSpan(1, 0, 0, 0))

MethodA()
ts.Complete()

End Using

MethodA()次に、アンビエント トランザクション内に正常に参加するいくつかのメソッドを呼び出し、それを見ることができます。

ここに画像の説明を入力

ただし、1 つのメソッド (上記の作成からコール スタックの深さ 4 ですTransactionScope) は、アンビエント トランザクションにアクセスできなくなったようです。

ここに画像の説明を入力

これは、トランザクション内のスタックの下位のどこでも利用できると私は信じていました。おそらくそれが、このメソッド内のコードがこのトランザクション内のデータにアクセスできない理由です。

アンビエント トランザクションが利用できない理由はありますか?

4

1 に答える 1

1

宣言されていない場合、そのファイルには、それをスコープに入れるディレクティブがTransaction単に欠けているように思えます。using時計を逆にしてみる

System.Transactions.Trasaction.Current.TransactionTraceId.TransactionIdentifier

代わりに、usingディレクティブの有無にかかわらず機能します。

アンビエント トランザクションが利用できない場合でもTransaction、問題はありませTransaction.Currentんが、 null. これの一般的な理由は、asyncコードなど、スレッドを切り替えるものです。実行コンテキスト上で何が流れるかを知るのは難しいです。

于 2013-03-07T11:18:33.627 に答える