天天看點

WCF用戶端異常處理

      WCF的用戶端調用由于要使用到非托管的資源,通過網絡連接配接傳輸資料,有Socket通信開發經驗的朋友都知道在網絡連接配接過程中可能出現許多問題,WCF雖然經過了良好的封裝,但仍然需要我們在調用時用代碼去解決。

      WCF用戶端調用的異常分為兩種類型:預期異常和意外異常,預期異常指的是在通信過程中可能會發生的TimeoutException、CommunicationException 以及CommunicationException 的任何派生類,發生這些異常的原因比較多,可能是請求逾時未處理,還有可能是網絡問題等等,而這些異常呢,我們是可以通過try catch方式來解決的,通過捕獲到CommunicationException 異常來對用戶端的調用做出關閉或撤銷等其他操作,以免對應用程式的的邏輯處理有影響。意外異常包括災難性故障(如 OutOfMemoryException)和程式設計錯誤(如 ArgumentNullException 或 InvalidOperationException)。通常沒有有效的方法來處理意外錯誤,是以通常不應在調用 WCF 用戶端通信方法時捕獲這些異常。

那麼我們怎麼去在調用時處理呢。

這裡我們建立了一個服務,在用戶端引用後我們看一下生成的代理類是繼承了clientBase<>的,

<a target="_blank" href="http://blog.51cto.com/attachment/201106/231925283.png"></a>

而ClientBase是繼承自IDisposable這個接口的,我們就可以通過Using的方式來解決資源釋放問題

<a target="_blank" href="http://blog.51cto.com/attachment/201106/231939658.png"></a>

 那麼,可以使用using方式來處理WCF的調用嗎? 

上圖中在調用WCF後是需要使用結果的,但是我們想一下這個Proxy如果在通信過程中發生異常了,還能繼續foreach的循環麼?顯然是不行的,因為在using的關閉大括号處已經抛出異常了,是以WCF并不推薦這樣的處理,我們可以使用try catch方式來捕獲這些預期的異常做出處理: 

上面隻是對異常做了簡單的處理,并不能确定是什麼異常,那麼我們就可以利用WCF的預期異常來确定異常細節進而做出更細節化得處理 

<a target="_blank" href="http://blog.51cto.com/attachment/201106/232016912.png"></a>

 那麼這樣的處理後,當出現異常後我們可以對用戶端進行相應異常的提示,在開發中也可以為調試提供更準确的資訊。

另,在silverlight調用WCF時發現代理類并沒有繼承IDisposable,猜想是自己進行資源釋放了吧,OOB後提升了權限,不知道跟網絡連接配接釋放有沒有關系,有知道的朋友不妨告訴一下。多謝。

     本文轉自xshf12345 51CTO部落格,原文連結:http://blog.51cto.com/wengyuli/583870,如需轉載請自行聯系原作者