2

在我目前的项目中,我们正在开发一个分布式云应用程序,它将存储实体的状态和相关事件。当从队列中接收到消息时,我们会更新 SQL Azure 中实体的状态,并将与该更新关联的事件保存在表存储中。

它看起来像这样:

  • 启动工作单元
    • 在 SQL Azure 中更新实体
    • 将事件保存到表存储
    • 提交事务
  • 结束工作单元

我们在这里遇到的问题是我们无法在一个事务中提交 SQL Azure 和表存储中的更改。因此,当 SQL Azure 中实体保存失败时,我们希望回滚表存储中的事件保存。

任何帮助深表感谢。

4

1 回答 1

2

如果我了解您的目标,您将尝试涵盖以下两种情况:

  • 如果数据库插入失败,回滚 Azure 表
  • 如果 Azure 表插入失败,回滚 SQL Azure

假设您在同一个线程中执行两个请求,您是否尝试过这样的方法(伪代码)?请注意,我正在使用数据库引擎的事务功能;这与 MSDTC 不同,因为我只为单个连接执行此操作 - 所以这是受支持的。

dbConnection.BeginTransaction;

try { 
     // add record in database - it is in a transaction so it can be rolled back
     insert_into_sqlazure;
     }
catch
{ 
    // automatic rollack - just exist with error
    exit_with_error;
}

try
{
     insert_into_azure_table;
     dbConnection.CommitTransaction;
}
catch
{
    dbConnection.Rollback;
    exit_with_error;
}
于 2013-04-18T17:52:03.490 回答