事务范围使用API​​调用

时间:2018-02-16 04:23:16

标签: c# asp.net transactionscope

我正在开发一个分发并依赖于某些内部数据库操作以及某些第三方API的进程。如果在任何时候发生错误,我想利用事务范围功能回滚。

以下是我的流程如何运作。

用户注册流程

  1. 使用Dapper ORM填充我们插入数据库的基本信息。
  2. 一半填写的信息将传递给第三方API。
  3. 如果API调用成功,则用户通过支付网关API注册到我们的支付系统。
  4. 现在是我担心的情况。让我们说#1& #2成功完成,在执行#3时,由于任何原因失败。在这种情况下,事务范围是否会恢复#1和#2?我确定#1,但它也会被#2处理?如果没有,我可以在这种情况下实施什么替代解决方案。

2 个答案:

答案 0 :(得分:0)

我认为这通常应该避免,也就是说,使REST API调用成为事务的一部分。但是,如果你仍然需要这样做,那么你需要自己实现事务协调器。

在您的情况下,在dapper插件周围使用transactionScope并调用API。如果出现问题,请向API中的其他方法发送新请求,以回滚您在事务中执行的操作。

try {
        using (var ts = new TransactionScope())
        {
          // insert data using dapper
          // Do your API Call
          ts.Complete()
        }
   }
  catch(Exception)
  {
     // Rollback your API call. 
  }

答案 1 :(得分:0)

你不能。只有您可以实现的是,如果API调用失败,您可以回滚您的事务

你无法控制API发生的事情。

但这可以通过一些错误代码相互理解来完成,如果我发回“错误”,这意味着我回滚,你也回滚