SQL事务在WCF事务中的影响

时间:2013-09-28 15:28:20

标签: c# wcf transactions transactionscope

我正在调用wcf服务,其目的是在sql server表中插入一些细节。我正在使用sql事务,插入操作后我也提交了sql server的事务。现在,此服务由客户端调用,该客户端已启动自己的事务并在其事务内调用此服务。所以我的查询是: -

如果事务是由SQL server commit transaction命令提交的,并且在调用其他服务后客户端发生了一些异常(此服务功能成功执行但客户端正在调用另一个抛出异常的wcf服务),那么插入的数据将是回滚到第一个服务的数据库与否,如果是,它将如何发生。

2 个答案:

答案 0 :(得分:2)

此示例与您的问题相关:Tansactions in WCF

它有一个客户端在一个事务中调用2个WCF服务。每个服务本身都在DB上发布一个事务。该示例测试了对第一个服务器的调用超过然后抛出异常的情况 - 第一次调用的数据没有写入db,因为客户端事务由于第一次服务器调用后的异常而被回滚。

这是如何工作的问题是一个很好的问题,因为似乎有一个神奇的元素!我不是这方面的专家(所以最好还是等待听一个!)我所能建议的是当你声明你的WCF方法[OperationBehavior(TransactionScopeRequired = true)]时,WCF会对方法代码做一些反思。在事务中包装数据库活动 - 并且它处理在异常时在db上回滚生成的事务 - 但我无法深入了解该机制的详细信息(我确定其他人可以) - 你可能想要重新提出一个更清楚/直接关注这一点的新问题。

您还可以通过尝试服务方法的功能来获得insite - 即如果您更改db代码而不是编写文件,您可能会发现如果存在异常,则会写入该文件。

更新:有关TransactionScope如何在此answer中运行的详细信息。

答案 1 :(得分:1)

SQL事务单独工作,即使客户端在其末尾回滚事务,也可以使用WCF服务中完成的提交。我遇到了类似的情况并观察到了上述结果。