WebService事务处理
生活随笔
收集整理的這篇文章主要介紹了
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);
????? }
?? }
關于事務的基本概念再次就不過多涉及,只需要記住它的四個屬性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();
????? }
?? }
}
測試和預期完全正確。
總結
以上是生活随笔為你收集整理的WebService事务处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在web开发中的三个层次使用事务
- 下一篇: 服从命令听指挥打三个数字?