我正在尝试通过实现 IEnlistmentNotification 接口来创建自定义的“资源管理器”。该接口具有以下方法:
- Prepare() - 准备
- Commit() - 提交
- Rollback() - 回滚
- InDoubt() - 不确定
虽然回滚代码应该放在 Rollback() 方法中,但我不确定应该在哪个方法中实现执行实际操作的代码。是应该放在 Prepare() 中?还是放在 Commit() 中?或者是放在类中的其他自定义方法中,在 TransactionScope 块内部从外部代码调用该方法?
TransactionScope
实例传递给管理器并将管理器注册到事务中吗?还是我该如何注册ResourceManager
以便调用Prepare、Commit或Rollback? - Stoyan DimovTransaction.Current!=null
,如果是这种情况,它可以使用Transaction.Current.EnlistDurable
或Transaction.Current.EnlistVolatile
自行注册,以便选择最合适的方式。 - Marc SelisInDoubt
是什么? - JobaDinizCommit
实现中未收到enlistment.Done()
信号时,将调用InDoubt
。这使得事务管理器不确定您的提交是否正确执行。因此,它调用您的InDoubt
方法,该方法应返回调用enlistment.Done()
以再次表示提交成功。有关更多信息,请参见文档。 - Marc Selis