4

我正在调用 wcf 服务,其目的是在 sql server 表中插入一些详细信息。我正在使用 sql 事务,在插入操作之后,我还提交了 sql server 的事务。现在这个服务被一个客户端调用,该客户端已经启动了它自己的事务并且在它的事务内部调用这个服务。所以我的查询是:-

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

4

2 回答 2

2

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

它有一个客户端在事务中调用 2 个 WCF 服务。每个服务本身都会在数据库上发出一个事务。该示例测试了对第一个服务器的调用成功但随后引发异常的情况 - 第一次调用的数据不会写入 db,因为客户端事务在第一次服务器调用后由于异常而回滚。

这是如何工作的问题是一个很好的问题,因为似乎确实涉及魔法元素!我不是这方面的专家(所以最好等着听一个!)我只能建议,当你声明你的 WCF 方法时[OperationBehavior(TransactionScopeRequired = true)],WCF 会在方法代码上做一些反射魔法,以将数据库活动包装在事务中 -并且它会处理在异常时将生成的事务回滚到数据库上-但我无法深入了解该机制的细节(我相信其他人可以)-您可能想改写一个更清楚地关注的新问题/直接在这一点上。

您还可以通过试验服务方法的功能来获得现场信息 - 即,如果您将数据库代码更改为写入文件,您可能会发现无论是否存在异常,该文件都已写入。

更新:在这个答案中有一些关于 TransactionScope 如何工作的细节。

于 2013-09-28T16:07:37.520 回答
1

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

于 2014-03-11T21:23:08.930 回答