• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Web服務中的異常處理(1)

    發表于:2007-05-25來源:作者:點擊數: 標簽:
    Web服務是一種完成分布式計算的相關新方法。在分布式計算中,應用程序被設計為服務運行在 服務器 上??蛻舳送ㄟ^一個可編程的接口訪問這些服務。當在Web服務的執行期間發生了異常,Web服務應該不只是捕捉到異常,還應該把異常傳回給Web服務的客戶端。因為Web
    Web服務是一種完成分布式計算的相關新方法。在分布式計算中,應用程序被設計為服務運行在服務器上??蛻舳送ㄟ^一個可編程的接口訪問這些服務。當在Web服務的執行期間發生了異常,Web服務應該不只是捕捉到異常,還應該把異常傳回給Web服務的客戶端。因為Web服務提供一種平臺無關的方法來支持特定功能,所以Web服務中發生的異常也必須以一種平臺無關的方式被傳回。為了達到這個目的,必須確保Web服務所產生的異常兼容SOAP規范。本文中,我們將了解怎樣使用SoapException對象從Web服務中拋出異常,而SoapException對象提供了一種表示SOAP Fault的工業標準方法。我們還將了解怎樣在Web服務的客戶端應用程序中處理這個異常。

      簡介
      
      異常是正在執行的程序所遇到的任何錯誤情形或者意外行為。很多原因都可以引起異常,例如,代碼中錯誤、操作系統資源不可用、公共語言運行時(common language runtime)中的意外情況等等。然而應用程序能夠從上述的一些情況中恢復執行,但是大多數運行時異常是不可恢復的。在這種情況下,需要一種有效的方法來處理這些異常并給調用者提供相同的異常。

      用結構化的異常處理方法來處理異常

      在.NET Web服務中,對異常處理支持的關鍵點是由try...catch..finally語句提供的。關鍵字try放在可能拋出異常的普通處理代碼塊之前。關鍵字catch放在異常處理代碼塊之前。關鍵字finally放在那些經常在異常處理后還需要執行的代碼塊之前。一旦異常從try代碼塊中拋出,程序流切換到后面的第一個catch代碼塊。一套設計良好的錯誤處理代碼塊可以成功的使程序變得更加健壯,使程序崩潰的機率變得更小,那是因為應用程序處理像這樣的錯誤所采取的方法的緣故。處理異常的最好實踐可以總結如下:

      經常用try/finally塊包圍潛在的可能發生錯誤的代碼,并且把catch語句集中在一個地方。用這種方法,try語句拋出異常,finally語句關閉或釋放資源,而catch語句則集中處理異常。


      通常,catch語句塊從非常特殊到一般來排列異常。這個技巧使得異常被傳遞到一般catch塊之前先處理特殊異常。

      大多數情況下,使用已有的異常類型。新的異常類型應該僅在有計劃的情形下引進。

      使用異常的構建方法。一個類的實現中在不同地方拋出同一個異常,這是非常普遍的現象。為了避免出現過量的這類代碼,使用助手方法創建異常和返回異常。

      至此,我們已經大致了解處理異常的最好實踐,下面就讓我們看看怎樣從Web服務中拋出異常。

      從Web服務中拋出異常

      在Web服務中處理異常與在Web或Windows應用程序中處理異常沒有什么區別。但是,在設計Web服務中的異常塊時,必須明白一個事實,即你需要以一種平臺無關的基于SOAP規范的方式把異常信息傳遞給Web服務的客戶端。為了達到這個目的,你應該使用SoapException類,它抽象了SOAP Fault創建過程的復雜度。SoapException類具有下列屬性,并且這些屬性必須在把異常拋出給客戶端之前被設定。

      Message--異常的內容

      Code--指定Fault編碼類型(例如,ClientFaultCode和ServerFaultCode)的枚舉常量

      Actor--發生異常的Web服務方法的URL

      Detail--Detail元素可以用來把更多的異常信息傳遞給調用者。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>