【问题标题】:Best way to handle transactions dealing with stored procedures, Entity Framework within WCF?处理处理存储过程的事务的最佳方法,WCF 中的实体框架?
【发布时间】:2012-09-10 16:17:28
【问题描述】:

这是大图:

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

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

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

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

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

环境规范为:

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

非常感谢大家。

弗莱迪。

【问题讨论】:

  • 你可以尝试改变你的 DBA 团队!

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


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢您的回答,拉迪斯拉夫。我担心赔偿是我解决这一切的唯一机会。我知道可能导致分布式事务的复杂性和性能问题。我也在考虑启动 WF 流程,但我听说他们的表现也很差,显然它不应该是近实时业务交易的选择。你知道我可以使用任何轻量级的 .Net 工作流框架吗?
  • 很抱歉,除了 Workflow 基础、BizTalk 编排和自定义开发的工作流引擎,我从未使用过任何工作流 API。
猜你喜欢
  • 2016-07-18
  • 1970-01-01
  • 2019-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多