Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以使用WCF实现长时间运行的多个写事务?_C#_Sql Server_Oracle_Wcf_Distributed Transactions - Fatal编程技术网

C# 是否可以使用WCF实现长时间运行的多个写事务?

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和Microsoft分布式事务协调器,是否可以针对单个数据库实现长时间运行的事务?我已经画出了这个场景的简化版本

交易是否有时间限制

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


数据库事务应该是短期的。例如,见

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

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


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

您不使用WCF的事务和可靠消息功能的原因是什么?这将有助于备份链接中描述的锁定点。在我看来,这似乎是不这样做的最大原因,而不是连接问题。@johnsa理解其中的“时间流逝”意味着交易将是长期的,这是一件坏事。对于短期事务,我已经使用WCF成功地使用了DTC和WS事务,并且可以推荐它。@Scampbell链接的问题非常广泛地讨论了为什么这是一个坏主意。锁定确实是最大的痛苦,如果您想读取插入但尚未提交的Emp行,就必须玩弄隔离级别。