zoukankan      html  css  js  c++  java
  • 在事务中调用WebService一定程度上实现数据同步

    错误方法:
    using (TransactionScope scope = new TransactionScope())
                {
                   
    try
                    {
                        ws.WebService1 webs
    = new 分布式事务_DEMO.ws.WebService1();
                        webs.HelloWorld();
    //这里执行成功,远程数据库已插入数据。失败则回滚

                        exeSql();
    //这里执行失败,回滚并不会回滚远程数据库的数据。成功则提交事务。

                        scope.Complete();
                    }
                   
    catch (Exception ex)
                    {
                       
    //throw new Exception("发送信息异常,原因:" + ex.Message);
                    }
                   
    finally
                    {
                       
    //释放资源
                        scope.Dispose();
                    } 
                }


    正确方法:
    using (TransactionScope scope = new TransactionScope())
                {
                   
    try
                    {

                        exeSql();
    //这里执行失败,则直接回滚,成功则继续

                        ws.WebService1 webs
    = new 分布式事务_DEMO.ws.WebService1();
                        webs.HelloWorld();
    //这里执行成功则远程数据库已插入数据并且提交事务。                                       

                                                  //如果失败这里的事务也回滚

                        scope.Complete();
                    }
                   
    catch (Exception ex)
                    {
                       
    //throw new Exception("发送信息异常,原因:" + ex.Message);
                    }
                   
    finally
                    {
                       
    //释放资源
                        scope.Dispose();
                    } 
                }



    以上方法在一定程度上实现数据同步。但并不是真正意义上的分布式事务。因为如果在scope.Complete();断线或者出现其它什么故障终止了。此时远程数据库已经有数据,而本地并没有,当然这种情况是比较极端的。

    另外引用大牛"SP1234"的话:“我想一般的应用,你没有必要考虑所谓分布式事务这种过于技术化的概念。你可以在本地的数据库事务中去访问远程web service,如果出错就会回滚好了(就是我上面实现的方法!)。
    如果这种做法性能实在是不佳(所谓理论上的分布式事务的性能也一样很差),你可以改为业务思路,一个后台线程一点一点地、在前台有空闲时做数据同步,这就够了。”

  • 相关阅读:
    自我介绍
    自动生成小学生四则运算(C语言)
    黄金点游戏
    7/5linux命令(整理中)
    第二章内容及作业
    第三章笔记
    第一章作业
    第一阶段笔记整理7.23
    第三章课后作业
    7/6linux命令
  • 原文地址:https://www.cnblogs.com/zhuawang/p/2116747.html
Copyright © 2011-2022 走看看