我正在开发基于.Net的客户端/服务器版本控制系统,基本上涉及
在客户方: 嵌入式数据库 文件系统
在服务器端: Sql server db 文件系统
每次从客户端将新版本上载到服务器时,都会发生以下步骤: 1.使用新文件元数据更新客户端数据库(新版本#,时间戳等) 2.通过HTTP将文件发送到服务器,将文件复制到服务器的文件系统中 3.文件传输完成后,使用新的元数据
更新Sql server db整个过程被视为交易。问题是,如果失败,我们很难根据错误发生的不同阶段回滚事务。
我的问题是,处理这种分布式提交的算法是什么?我听说过三阶段提交,这适合这种情况吗?
谢谢,
答案 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
}
}
}