WebService如何拋出干凈的異常


轉載:http://www.cnblogs.com/ahdung/p/3953431.html

說明:【干凈】指的是客戶端在捕獲WebService(下稱WS)拋出的異常時,得到的ex.Message就是WS方法中拋出的異常消息,不含任何“雜質”。

前提:你對WS有編寫權。就是說如果你調的是別人寫的WS,那么也許只能通過字符串處理的方式才能得到干凈的ex.Message。

 

先看示例:

- WS方法:

復制代碼
/// <summary> /// 測試WS拋異常 /// </summary> /// <param name="isSoapEx">為true就拋出SoapException,否則拋出Exception</param> /// <param name="errMsg">自定義異常消息</param> [WebMethod] public string Test(bool isSoapEx, string errMsg) { throw isSoapEx ? new SoapException(errMsg, SoapException.ServerFaultCode) : new Exception(errMsg); }
復制代碼

- 客戶端調用:

 

可以看到,如果WS拋出的是Exception,客戶端得到的ex.Message就是含有“雜質”的,所以得到干凈異常消息的要訣之一就是:

WS要拋出SoapException異常。

這就是為什么說你要有對WS的編寫權,因為別人的WS如果拋的不是SoapException,你就會得到先天含有雜質的ex.Message,需要經過一定加工才行。

剛剛說的是要訣之一,那就是說即便WS拋的是SoapException,也有可能得到不干凈的ex.Message,如圖:

這是由ASP.NET程序的【自定義錯誤消息】設定為“Off”引起的,把WS的web.config中的configuration\system.web\customErrors節點的mode屬性設為“On”或“RemoteOnly”即可。如圖:

 

所以,總結一下,以我目前所知,要想在客戶端得到干凈的ex.Message,要訣有二:

1、WS要把異常封裝為SoapException再拋出

2、WS的【自定義錯誤消息】不能設為Off


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM