【问题标题】:Rolling back previously committed transaction回滚之前提交的事务
【发布时间】:2011-10-07 09:46:50
【问题描述】:

在我目前正在开发的服务中,我需要提供双重操作:

  1. 正在发出的请求应该在数据库中注册(使用Register()方法);和
  2. 应将请求发送到外部webservice 以进行进一步处理(使用Dispatch() 方法)。

考虑到我无法切换操作的顺序,如果第二个出现问题,我希望能够“回滚”第一个,以便不会将当时无效的记录插入到BD。这里的问题是,当然,我在Register 方法中提交事务。如果出现任何问题,有什么方法可以从 Dispatch 方法内部回滚?

编辑:所有事务都在 .NET 端进行管理。

【问题讨论】:

  • 您需要two-phase commit。这基本上是MSDTC 所做的,这是您最好的选择:使用分布式事务协调器。但我认为最好重新考虑你的完整交易策略。尝试以不需要分布式原子性的方式设计系统。

标签: c# .net sql-server-2005 transactions


【解决方案1】:

在这种情况下,数据库不会帮助您。您必须使用相互撤消的操作对来创建补偿事务。您的服务将不得不有效地取代关系数据库中用于管理事务的所有工作和逻辑。

【讨论】:

  • 谢谢!但是,我忘了提到,所有事务都是从 .NET 端管理的。
  • 不会改变我的答案 - 你必须做所有的事情。
猜你喜欢
  • 1970-01-01
  • 2017-02-14
  • 2013-11-20
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多