我正在尝试创建一个 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 的状态但没有成功。
我理解这类似于“补偿”而不是“交易”。
我正在尝试做的事情是否有意义?