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