【问题标题】:Is TransactionScope in .NET applicable to only specific types of transactions?.NET 中的 TransactionScope 是否仅适用于特定类型的事务?
【发布时间】:2019-07-10 23:31:36
【问题描述】:

TransactionScope 提供将一组操作转换为事务的功能,以便全部成功完成或不完成。我的问题是事务范围是否适用于某些类型的操作(例如,仅 SQL 连接、Azure 等)?

例如,考虑下面的代码块

using (TransactionScope scope = new TransactionScope())
{
    SaveToSQLserver(parameter);
    SaveToSalesForce(parameter);
    SaveToSAP(parameter);
    SaveToAzure(parameter);
    scope.Complete();
}

现在假设SaveToSAP 发生错误,它已经保存到 Salesforce;事务将如何从 Salesforce 回滚?如果一切都在内存中,那么它如何确保它在实际保存时会成功?

【问题讨论】:

标签: c# transactionscope


【解决方案1】:

TransactionScope 能够支持跨多种不同类型系统的分布式事务,但这不是自动的。这个documentation 提供了一个一瞥(值得在Transaction Processing 上查看整个文档层次结构。

正如 Dave Anderson 在 cmets 中提到的,资源管理器控制在提交和回滚期间完成的工作,因此“如何完成”由每个资源管理器单独管理。

那么,除了 SQL 之外,其他事物可以参与事务范围吗?是的他们可以。只要每个系统(例如消息传递系统)都存在资源管理器,它就可以参与 (enlist)。

如果您正在处理无法登记的内容,则必须在检测到需要回滚时手动执行compensating transaction(通常在发生异常时)。

【讨论】:

    猜你喜欢
    • 2016-11-08
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多