天天看點

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);

      }

   public void WiteToDataBaseV2(string user,string msg)

       ContextUtil.SetAbort();

       else

         ContextUtil.SetComplete();

}

測試和預期完全正确。

本文轉自左正部落格園部落格,原文連結:http://www.cnblogs.com/soundcode/archive/2011/05/25/2056864.html,如需轉載請自行聯系原作者