【发布时间】:2014-05-07 07:13:51
【问题描述】:
使用 WCF 和 Microsoft 分布式事务协调器,是否可以针对单个数据库实现长时间运行的事务?我已经绘制了相关场景的简化版本。
交易是否有时间限制?
假设数据库是 SQL Server 或 Oracle,在事务期间会发生锁定吗?是行级还是表级?
【问题讨论】:
标签: c# sql-server oracle wcf distributed-transactions
使用 WCF 和 Microsoft 分布式事务协调器,是否可以针对单个数据库实现长时间运行的事务?我已经绘制了相关场景的简化版本。
交易是否有时间限制?
假设数据库是 SQL Server 或 Oracle,在事务期间会发生锁定吗?是行级还是表级?
【问题讨论】:
标签: c# sql-server oracle wcf distributed-transactions
数据库事务应该是短暂的。例如见Are long-living transactions acceptable?
因此,虽然 WCF 和 DTC 将允许您跨机器和通过 SOAP 调用分发事务,但这对于您所描述的场景来说不是一个好主意。
改用补偿事务逻辑,例如Emp3 创建失败时删除插入的 Emp1 和 Emp2。或者手动将插入的 Emp1 和 Emp2 行标记为仍在事务中,直到它们都被成功写入。或者在 WCF 服务中收集操作,然后(以事务方式)在所有信息可用时将它们提交到数据库。
哪种解决方案最好取决于您的用例细节。
【讨论】: