轉載: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