环境: 
A网站有A数据库 用于用户在网上下订单 
B服务器有B数据库,用于保存在和个地区的订单汇总 方法:启动事务
if(本地更新) 

  如果本地更新成功,通过services更新b服务器 
  if(services更新成功) 
    返回更新成功信息,
    根据服务器返回数据再提交本地更新 
    //在这里再次提交本地更新的时候,出错了,这时就会让本地回滚,但WebService已经提交了 怎么回滚? 
  else 
    本地回滚 
    

else 

  不成功,则services不调用 
}

解决方案 »

  1.   

    在调用webservices的时候加个try catch用如下形式bool isSuccess = true;
    try
    {
    string result = MyServices();
    }
    catch
    {
    isSuccess = false;
    }if (isSuccess)
    {
    根据服务器返回数据再提交本地更新 
    }
    else
    {
    本地回滚 
    }
      

  2.   

    如果本地出现了错误,如何回滚服务器的呢?
    try
    {
      根据服务器返回数据再提交本地更新 
      string isSuccess = MyServices(); //MyServices种启动事务处理,
      if(!isSuccess )
    {
    本地回滚 
    }
    }
    catch
    {
    本地回滚 
    }
      

  3.   



    RE
    ------------------------
    楼上的两位看清楚我的问题啊
    我的问题不是更新WebService出错怎么办,
    我是说WebService成功后,再去更新本地,而本地这时个出错要回滚
    那WebService那边已经提交的怎么回滚谢谢


      

  4.   

    RE:作为异常分支,记录或者标记一下,然后用其他方式如人工来处理
    ------------------------------------------------
    记录下来,人工处理,好像不太现实啊
    程序上就不能回滚掉刚才的WebService谢谢
      

  5.   


    可以在B上提供一个回滚的webservice,问题是,如果此时回滚服务器B也不成功怎么办?这种分布式的事务,如果无法再同一个事务上下文中处理,那么就只能采用写日志/事务补偿等方式处理
      

  6.   

    涉及到2个数据库这是分布式事务,需要COM+服务才能支持。
      

  7.   

    建张新表作为webservices的提交日志,然后根据日志做相应回滚。