色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

WCF基本異常處理模式[中篇]

  通過(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)系我們修改或刪除,多謝。

主站蜘蛛池模板: 陈巴尔虎旗| 玉屏| 措美县| 元朗区| 宕昌县| 阜新市| 乌兰察布市| 景德镇市| 吴江市| 万山特区| 青神县| 商城县| 泸州市| 台湾省| 宣武区| 中牟县| 靖西县| 百色市| 城口县| 寿宁县| 临清市| 伊金霍洛旗| 仁化县| 巴东县| 清丰县| 调兵山市| 高青县| 阿拉尔市| 沧源| 灵山县| 介休市| 滨州市| 前郭尔| 永丰县| 蕲春县| 沅陵县| 浏阳市| 汝阳县| 宝清县| 赤壁市| 调兵山市|