av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

C#WebService異常處理的兩個(gè)常見(jiàn)問(wèn)題

在.Net中實(shí)現(xiàn)Web服務(wù)時(shí),在Web服務(wù)接口中產(chǎn)生的任何用戶異常(非SoapException之外的異常)都被包裝為SoapException傳遞給客戶端,這使得難以采用通常的方式處理Web Service的異常。本文講述如何通過(guò)SoapExceptionHelper實(shí)現(xiàn)一致的異常處理。

創(chuàng)新互聯(lián)公司專注于青秀企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),電子商務(wù)商城網(wǎng)站建設(shè)。青秀網(wǎng)站建設(shè)公司,為青秀等地區(qū)提供建站服務(wù)。全流程按需制作網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

C# Web Service異常處理問(wèn)題

在.Net中實(shí)現(xiàn)Web服務(wù)時(shí),Web服務(wù)接口中產(chǎn)生的任何用戶異常(非SoapException之外的異常)都被包裝為SoapException傳遞給客戶端 ,用戶錯(cuò)誤信息放置在SoapException的Message屬性中。

下面的例子演示了一個(gè)SoapException封裝的用戶異常信息。WebMethod接口TestException代碼拋出一個(gè)InvalidOperationException:

 
 
 
  1. [WebMethod]   
  2. public void TestException() {   
  3. throw new InvalidOperationException  
  4. ("Invalid Operation.");   
  5. }   

WebMethod的客戶端將捕獲一個(gè)SoapException異常,Message消息如下:

其中Message消息包含一段“...-->[ 1 ]:[ 2 ] at ....”的信息,[1]為用戶異常類,[2]為用戶異常消息。而一個(gè)原始的SoapException(用new SoapException(...)的方式創(chuàng)建并拋出的異常)則沒(méi)有這些信息,下面是一個(gè)原始的SoapException消息:

遺憾的是,目前的SoapException并沒(méi)有提供更多直接的手段直接獲取原來(lái)的異常信息,唯一包含的用戶異常信息在Message字符串中,對(duì)于使用Web Service作為分布式機(jī)制的應(yīng)用系統(tǒng)來(lái)說(shuō)是非常不方便的,調(diào)用者無(wú)法捕獲原來(lái)的異常,難以獲取用戶友好的異常信息。同時(shí),因?yàn)閃eb Service接口代理不再拋出原來(lái)的異常,應(yīng)用的開(kāi)發(fā)者需要考慮兩套完全不同的異常處理機(jī)制,帶來(lái)了程序結(jié)構(gòu)的復(fù)雜性。

創(chuàng)建SoapException輔助類:SoapExceptionHelper 來(lái)解決C# Web Service異常處理

SoapExceptionHelper輔助類包含下列主要接口:

 
 
 
  1. IsUserException:是否是一個(gè)UserException   
  2. UserException:返回原始的UserException   
  3. Message:原始異常的錯(cuò)誤消息。   
  4. 獲得原始的用戶異常類和異常消息   
  5. 通過(guò)正則表達(dá)式類我們可以獲得原始的用戶異常類和異常消息:   
  6.  
  7. ///    
  8. /// 讀取UserException信息。   
  9. /// 
  10.    
  11. private void ReadUserExceptionInfo() {   
  12. //match user exception class   
  13. System.Text.RegularExpressions.  
  14. MatchCollection mc = Regex.Matches  
  15. (soapException.Message, "---> ([^:]+):");   
  16. if (mc.Count >= 1) {   
  17. userExceptionClass = mc[0].Groups[1].Value;   
  18. //match user exception message   
  19. mc = Regex.Matches(soapException.  
  20. Message, "---> [^:]+:(.*)\n");   
  21. if (mc.Count > 0) UserExceptionMessage   
  22. = mc[0].Groups[1].Value;   
  23. }   
  24. }   
  25.  
  26. 創(chuàng)建用戶異常實(shí)例   
  27. UserException接口利用反射機(jī)制創(chuàng)建  
  28. 一個(gè)原來(lái)的Exception類實(shí)例:   
  29.  
  30. ... ...   
  31. Assembly callingAssemply = Assembly.  
  32. GetCallingAssembly();   
  33. Type exceptionType = GetExceptionType  
  34. (callingAssemply); //獲得用戶異常類型定義   
  35. Exception e = null;   
  36. try {   
  37. try {   
  38. e = Activator.CreateInstance(exceptionType,   
  39. new object[]{UserExceptionMessage},   
  40. null) as Exception;   
  41. }   
  42. catch {}   
  43. //if no exists constructor with message parameter,   
  44. use no parameters constructor.   
  45. if (e == null) e = Activator.CreateInstance  
  46. (exceptionType) as Exception;   
  47. }catch(Exception ex) {   
  48. throw new SoapExceptionHelperException  
  49. (userExceptionClass, ex);   
  50. }   
  51.  
  52. return e;   

創(chuàng)建用戶異常的問(wèn)題

因?yàn)橛脩舢惓?赡芏x在不同的集成塊中,SoapExceptionHelper可能無(wú)法知道它的位置,無(wú)法正確的獲取C# Web Service異常處理類型,如一個(gè)與SoapExceptionHelper所在集成塊和調(diào)用集成塊(CallingAssembly)不再同一個(gè)引用范圍內(nèi)的異常類。SoapExceptionHelper如果無(wú)法創(chuàng)建原始異常的實(shí)例,就創(chuàng)建一個(gè)System.Exception對(duì)象實(shí)例。

為了創(chuàng)建真正的原始異常類,調(diào)用者可以在外部獲得實(shí)際的異常類型,并傳遞給SoapExceptionHelper,因?yàn)檎{(diào)用者可以明確的引用異常定義 所在的集成塊。示例如下:

 
 
 
  1. // 項(xiàng)目引用中引入異常定義所在的集成塊   
  2. ...   
  3. SoapExceptionHelper helper =   
  4. new SoapExceptionHelper(se);   
  5. Type type = Type.GetType(helper.  
  6. UserExceptionClass, "<異常類所在的集成塊>");   
  7. Exception e = helper.GetUserException(type);   
  8.  
  9. 如果外部沒(méi)有傳遞異常類型定義,  
  10. SoapExceptionHelper嘗試以以下順序獲取異常類型定義:   
  11. Executing Assembly   
  12. Calling Assembly   
  13. Referenced Assemblies (of Calling Assembly)   
  14. System.Exception   
  15. 使用SoapExceptionHelper   
  16. 返回用戶友好的消息   
  17. 使用SoapExceptionHelper顯示示例1中的錯(cuò)誤消息:   
  18. try {   
  19. ... ... // call web method   
  20. } catch (SoapException se){   
  21. MessageBox.Show(new SoapExceptionHelper(se).  
  22. Message) ; //show "Invalid Operation." string   

名稱欄目:C#WebService異常處理的兩個(gè)常見(jiàn)問(wèn)題
標(biāo)題URL:http://uogjgqi.cn/article/cddshoi.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流