在一个事务中调用两个WCF服务。两者都与同一个数据库交谈。 MSDTC是唯一的选择

问题描述:

我有一个WCF服务ServiceA。在一个事务中调用两个WCF服务。两者都与同一个数据库交谈。 MSDTC是唯一的选择

这反过来又必须调用两个单独的WCF服务ServiceB和ServiceC来完成两个不同的事情,但是如果对ServiceC的调用失败,我想回滚ServiceB所做的。

我没有实现它使用TransactionScope(我正在使用EF 6.0),但没有启用MSDTC它不起作用。有没有解决方法?我真的不想通过MSDTC路线,因为我担心会导致很多性能问题,并且网络管理员强烈反对。

+0

嗯 - 你需要某种服务,但你不想使用提供它的标准组件。写你自己的? – 2014-09-19 13:24:31

+0

你用什么数据库?版? – codeworx 2014-09-19 17:49:42

你想要的是一个分布式事务,因为你的事务包含跨界参与者。就我所知,Windows平台上分布式事务的唯一解决方案是MSDTC,但是没有办法解决这个问题。

但是,我会建议您尝试寻求更为一致的解决方案,而不是严格的事务性解决方案,因为您的解决方案很可能会更好地执行和扩展。当然,您将不得不面对数据不一致的特殊情况,这会导致更复杂的代码。

从我的经验来看,这将是值得的,但它取决于你。