Я пытаюсь создать 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 или проверил состояние SystemTransaction в методе Dispose (), но безуспешно.
Я понимаю, что это похоже на "компенсацию", а не на "транзакцию".
Имеет ли смысл то, что я пытаюсь сделать?