分散トランザクションに参加するために、System.EnterpriseServices.ServicedComponentを作成しようとしています。私の主な方法は次のようになります。
public void DoSomething()
{
try
{
// do something useful
// vote for commit
if (ContextUtil.IsInTransaction)
ContextUtil.MyTransactionVote = TransactionVote.Commit;
}
catch
{
// or shoud I use ContextUtil.SetAbort() instead?
if (ContextUtil.IsInTransaction)
ContextUtil.MyTransactionVote = TransactionVote.Abort;
throw;
}
}
私がやろうとしているのは、分散トランザクションが中止されたか(またはロールバックされたか)を検出してから、変更のロールバックにも進むことです。たとえば、ディスク上にファイルを作成したり、元に戻す必要のあるいくつかの副作用を実行したりした可能性があります。
SystemTransaction.TransactionCompletedイベントを処理しようとしたか、Dispose()メソッドでSystemTransactionの状態を調べましたが成功しませんでした。
これは「取引」ではなく「補償」に似ていると理解しています。
私がやろうとしていることは意味がありますか?