处理存储过程的事务的最佳方法,WCF中的实体框架?

时间:2012-09-10 16:17:29

标签: wcf entity-framework stored-procedures transactions transactionscope

这是大局:

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

我们有一个例子: 用户在网站(或移动应用程序)上下订单,客户端应用程序将调用WCF服务(让我们称之为订单处理管理器),该服务将协调所有业务事务。 OPM将以某种方式开始一个事务,以确保如果子进程失败,则回滚所有事务。

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

我的想法是,它不会像在OPM中使用事务范围那么简单,并且只要它决定回滚所有内容,它就会做所有的魔术。

如果有人已经遇到过这类问题,我全都听见了!

环境规范是:

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

非常感谢大家。

弗雷迪。

1 个答案:

答案 0 :(得分:1)

  

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

所以这只是你需要知道的要求才能找到没有神奇的解决方案。 WCF提供分布式事务,您的OPM可以使用TransactionScope并将事务传播到其他服务,但这需要配置和双方编码 - 而且必须由支持事务委派的API编写称为服务。分布式事务非常复杂,它们可能对系统产生很大的性能影响。

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