【问题标题】:Is it possible to implement long running, multiple-write transactions using WCF?是否可以使用 WCF 实现长时间运行的多写事务?
【发布时间】:2014-05-07 07:13:51
【问题描述】:

使用 WCF 和 Microsoft 分布式事务协调器,是否可以针对单个数据库实现长时间运行的事务?我已经绘制了相关场景的简化版本。

交易是否有时间限制?

假设数据库是 SQL Server 或 Oracle,在事务期间会发生锁定吗?是行级还是表级?

【问题讨论】:

    标签: c# sql-server oracle wcf distributed-transactions


    【解决方案1】:

    数据库事务应该是短暂的。例如见Are long-living transactions acceptable?

    因此,虽然 WCF 和 DTC 将允许您跨机器和通过 SOAP 调用分发事务,但这对于您所描述的场景来说不是一个好主意。

    改用补偿事务逻辑,例如Emp3 创建失败时删除插入的 Emp1 和 Emp2。或者手动将插入的 Emp1 和 Emp2 行标记为仍在事务中,直到它们都被成功写入。或者在 WCF 服务中收集操作,然后(以事务方式)在所有信息可用时将它们提交到数据库。

    哪种解决方案最好取决于您的用例细节。

    【讨论】:

    • 您不使用 WCF 的事务和可靠消息传递功能的原因是什么?
    • 这将有助于备份有关链接中描述的锁定点。在我看来,这似乎是不这样做的最大原因,而不是连接问题。
    • @JohnSaunders 上面写着“时间流逝”的地方意味着交易将长期存在,这是一件坏事。对于短暂的事务,我已经成功使用了 DTC 和 WS-Transactions using WCF,可以推荐一下。
    • @Scampbell 链接的问题非常广泛地讨论了为什么这是一个坏主意。锁定确实是最大的痛苦,如果您想阅读已插入但尚未提交的 Emp 行,则必须玩弄隔离级别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多