【问题标题】:Impact of SQL Transaction in WCF TransactionSQL 事务对 WCF 事务的影响
【发布时间】:2013-10-04 19:12:21
【问题描述】:

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

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

【问题讨论】:

    标签: c# wcf transactions transactionscope


    【解决方案1】:

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

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

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

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

    更新:answer 中有一些关于 TransactionScope 工作原理的详细信息。

    【讨论】:

    • 嗨 Ricibob 你能帮我详细介绍一下 wcf 是如何完成的
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 2015-07-30
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      相关资源
      最近更新 更多