客户端和服务器端涉及数据库和文件系统的分布式事务算法

时间:2012-02-14 19:15:45

标签: c# distributed-transactions

我正在开发基于.Net的客户端/服务器版本控制系统,基本上涉及

在客户方:    嵌入式数据库    文件系统

在服务器端:    Sql server db    文件系统

每次从客户端将新版本上载到服务器时,都会发生以下步骤: 1.使用新文件元数据更新客户端数据库(新版本#,时间戳等) 2.通过HTTP将文件发送到服务器,将文件复制到服务器的文件系统中 3.文件传输完成后,使用新的元数据

更新Sql server db

整个过程被视为交易。问题是,如果失败,我们很难根据错误发生的不同阶段回滚事务。

我的问题是,处理这种分布式提交的算法是什么?我听说过三阶段提交,这适合这种情况吗?

谢谢,

1 个答案:

答案 0 :(得分:0)

这是你可以尝试的东西,但你必须改进这个例子。这只是你可以做的一个例子

using (SqlConnection conn1 = new SqlConnection())
{
    using (SqlConnection conn2 = new SqlConnection())
    {
        try
        {
            using (var scope = new System.Transactions.TransactionScope())
            {
                //when opening the connection, its' implicitly enlisted in the transaction scope
                conn1.Open();
                SqlCommand command1 = new SqlCommand(cmdText, conn1);
                //set parameters
                command1.ExecuteNonQuery();

                conn2.Open();
                SqlCommand command2 = new SqlCommand(cmdText, conn1);
                //set parameters
                command2.ExecuteNonQuery();

                //transaction commit/rolls back if an exception is thrown
                scope.Complete();
            }
        }
        catch (System.Transactions.TransactionAbortedException ex)
        {
            //handle aborted transaction
        }
        catch (Exception ex)
        {
            //handle other exceptions
        }
    }
}