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