|
通過(guò)WCF基本的異常處理模式[上篇], 我們知道了:在默認(rèn)的情況下,服務(wù)端在執(zhí)行某個(gè)服務(wù)操作時(shí)拋出的異常(在這里指非FaultException異常),其相關(guān)的錯(cuò)誤信息僅僅限于服務(wù)端可見(jiàn),并不會(huì)被WCF傳遞到客戶端;如果將開(kāi)啟了IncludeExceptionDetailInFaults的ServiceDebug服務(wù)行為通過(guò)聲明(通過(guò)在服務(wù)類型上應(yīng)用ServiceBehaviorAttrite特性)或者配置的方式應(yīng)用到相應(yīng)的服務(wù)上,異常相關(guān)的所有細(xì)節(jié)信息將會(huì)原封不動(dòng)地向客戶端傳送。
這兩種方式體現(xiàn)了兩種極端的異常傳播(Exception Propagation)機(jī)制,對(duì)于基于服務(wù)操作執(zhí)行過(guò)程中拋出的異常的錯(cuò)誤細(xì)節(jié),要么完全對(duì)客戶端屏蔽,要么全部暴露于客戶端。在真正通過(guò)WCF來(lái)架構(gòu)我們的分布式系統(tǒng)中,我們往往需要一種折中的異常傳播機(jī)制:自定義服務(wù)端異常信息。這樣既可以讓客戶端得到一個(gè)易于理解的錯(cuò)誤信息,又在一定程度上避免了一些敏感信息的泄露。
一、 通過(guò)FaultException直接指定錯(cuò)誤信息
對(duì)于執(zhí)行服務(wù)操作中拋出的異常,如果服務(wù)的定義者僅僅希望服務(wù)的調(diào)用者得到一段自定義的錯(cuò)誤信息文本(字符串),我們要做的實(shí)際上很簡(jiǎn)單:在服務(wù)操作中直接拋出一個(gè)FaultException異常,該異常對(duì)象通過(guò)以字符串形式體現(xiàn)的自定義錯(cuò)誤信息創(chuàng)建。下面的代碼中,CalculaorService的Divide方式在指定的時(shí)候?qū)Φ诙?shù)進(jìn)行了驗(yàn)證,如果為零則創(chuàng)建一個(gè)FaultException,并指定錯(cuò)誤信息(“被除數(shù)y不能為零!”)。
1: using System.ServiceModel;
2: using Artech.WcfServices.Contracts;
3: namespace Artech.WcfServices.Services
4: {
5: [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
6: public class CalculatorService : ICalculator
7: {
8: public int Divide(int x, int y)
9: {
10: if (0 == y)
11: {
12: throw new FaultException("被除數(shù)y不能為零!");
13: }
14: return x / y;
15: }
16: }
17: }
NET技術(shù):WCF基本異常處理模式[中篇],轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。