2

这是大图:

在我们新的基于 SOA 的信息系统中,我们需要构建几个 WCF 服务。这些服务的主要目标是处理业务交易。

举个例子:用户在网站(或移动应用程序)上下订单,客户端应用程序将调用 WCF 服务(我们称之为 Order Process Manager),该服务将编排所有业务事务。OPM 会以某种方式开始一个事务,以确保如果一个子进程失败,所有事务都会回滚。

关键是 OPM 可能必须调用其他服务,如用户帐户服务、库存管理服务等等……这些服务可能是现有服务(我们无法修改),它们调用提交和回滚自己的事务的存储过程。另一种可能性是那些其他服务可能建立在实体框架之上,有自己的方式来处理事务(使用工作单元、事务范围、存储库和东西......)

我的想法是,它不会像在 OPM 中使用事务范围那么简单,而且它会在决定回滚所有事情时发挥所有作用。

如果有人已经遇到过这些问题,我会全力以赴!

环境规格为:

  • .Net 4.0 / C#
  • WCF
  • SQL Server 2008R2

非常感谢大家。

弗雷迪。

4

1 回答 1

1

这些服务可能是现有服务(我们无法修改)

因此,这只是您需要知道的要求,以发现没有适合您的神奇解决方案。WCF 提供分布式事务,您的 OPM 可以在其中使用TransactionScope事务并将事务传播到其他服务,但这需要双方进行配置和一些编码 - 此外,调用的服务必须由支持事务委托的 API 编写。分布式事务非常复杂,它们会对系统产生很大的性能影响。

如果您必须使用现有服务而无法更改它们,那么您唯一的选择就是补偿。补偿就像手动回滚——它经常用于长时间运行的进程中,在这些进程中不能使用带锁的标准事务。补偿是您自己调用的自定义代码而不是回滚,它将恢复当前业务事务所做的所有更改。

于 2012-09-10T19:52:58.920 回答