• WebService事务处理


    如果在WEB服务中有这样一个场景,某个WEB服务的方法要执行两个任务,它首先要在数据库中创建一个新表,接着调用对象来收集和格式化数据,并在新表中插入数据。象这样的一组方法,我们必须保证他们都成功执行,否则会造成很多脏数据在系统中,这时事务就出场了。
    关于事务的基本概念再次就不过多涉及,只需要记住它的四个属性ACID即可。
    WEB服务中的事务是用WebMethod特性的TransactionOption属性来申明的。如果WEB服务方法执行时发生异常,则自动会终止事务,反之则提交事务。WEB服务的方法仅有两种可能的行为:Disabled,NotSupported,Supported表示不参与事务;Required,RequiresNew表示创建一个新的事务。意思是说当TransactionOption的属性为Required或RequiresNew的WEB服务方法调用另一个TransactionOption的属性为Required或RequiresNew的WEB服务方法时,每个WEB服务方法将参与他们自己的事务。
    PS:WEB服务方法的TransactionOption默认属性为Disabled
    同时我们也可以显示调用System.EnterpriseServices.ContextUtil类的SetAbort方法取消事务,调用SetCompleted方法完成事务。
    例子:
    using System.EnterpriseServices;
    Class WebServiceTransaction:WebService
    {
       pulic void Write(string user,string msg)
       {
         //将接收这两个参数写入数据库。。。
       }
       [WebMethod(TransactionOption=TransactionOption.RequiresNew)]
       public void WiteToDataBasev1(string user,string msg)
       {
          Write(user,msg);
          if(user!="kim")
          {
           string msg="sorry,you can not access";
            throw new UnauthorizedAccessException(msg);
          }
       }

       [WebMethod(TransactionOption=TransactionOption.RequiresNew)]
       public void WiteToDataBaseV2(string user,string msg)
       {
          Write(user,msg);
          if(user!="kim")
          {
           ContextUtil.SetAbort();
          }
           else
          {
             ContextUtil.SetComplete();
          }
       }
    }
    测试和预期完全正确。

  • 相关阅读:
    【POJ】【2420】A Star not a Tree?
    【BZOJ】【2818】Gcd
    【BZOJ】【2190】【SDOI2008】仪仗队
    【Vijos】【1164】曹冲养猪
    【BZOJ】【1430】小猴打架
    【BZOJ】【3611】【HEOI2014】大工程
    【转载】完全图的生成树
    【BZOJ】【2286】【SDOI2011】消耗战
    【POJ】【1061】/【BZOJ】【1477】青蛙的约会
    Codeforces VK Cup Finals #424 Div.1 A. Office Keys(DP)
  • 原文地址:https://www.cnblogs.com/soundcode/p/2056864.html
Copyright © 2020-2023  润新知