C# 是否可以使用WCF实现长时间运行的多个写事务?
使用WCF和Microsoft分布式事务协调器,是否可以针对单个数据库实现长时间运行的事务?我已经画出了这个场景的简化版本 交易是否有时间限制 假设数据库是SQL Server或Oracle,在事务期间会发生锁定吗?它是在行级还是表级C# 是否可以使用WCF实现长时间运行的多个写事务?,c#,sql-server,oracle,wcf,distributed-transactions,C#,Sql Server,Oracle,Wcf,Distributed Transactions,使用WCF和Microsoft分布式事务协调器,是否可以针对单个数据库实现长时间运行的事务?我已经画出了这个场景的简化版本 交易是否有时间限制 假设数据库是SQL Server或Oracle,在事务期间会发生锁定吗?它是在行级还是表级 数据库事务应该是短期的。例如,见 因此,虽然WCF和DTC将允许您通过SOAP调用跨机器分发事务,但对于您描述的场景来说,这不是一个好主意 使用补偿事务逻辑,例如,当创建Emp3失败时,删除插入的Emp1和Emp2。或者手动将插入的Emp1和Emp2行标记为仍在事
数据库事务应该是短期的。例如,见 因此,虽然WCF和DTC将允许您通过SOAP调用跨机器分发事务,但对于您描述的场景来说,这不是一个好主意 使用补偿事务逻辑,例如,当创建Emp3失败时,删除插入的Emp1和Emp2。或者手动将插入的Emp1和Emp2行标记为仍在事务中,直到它们都被成功写入。或者收集WCF服务中的操作,然后在所有信息可用时(以事务方式)将它们提交到数据库
哪种解决方案最好取决于您的用例细节。您不使用WCF的事务和可靠消息功能的原因是什么?这将有助于备份链接中描述的锁定点。在我看来,这似乎是不这样做的最大原因,而不是连接问题。@johnsa理解其中的“时间流逝”意味着交易将是长期的,这是一件坏事。对于短期事务,我已经使用WCF成功地使用了DTC和WS事务,并且可以推荐它。@Scampbell链接的问题非常广泛地讨论了为什么这是一个坏主意。锁定确实是最大的痛苦,如果您想读取插入但尚未提交的Emp行,就必须玩弄隔离级别。