先來說說SOAP消息中錯誤消息的包裝結(jié)構(gòu),一條SOAP錯誤消息的大致形式如下:

    
      a:錯誤碼
      。

首先是Fault元素,然后下面是錯誤消息相關(guān)聯(lián)的子元素。在上一篇爛文中,老周曾介紹過FaultReason,這個類用于包裝錯誤文本信息,并且支持多種語言。上面所展示的Fault元素中,faultstring子元素中的內(nèi)容就是FaultReason類所指定的文本。

大伙伴們可能已經(jīng)發(fā)現(xiàn)了,F(xiàn)ault元素下還有一個叫 faultcode 的子元素,它便是本文的主角,我們可以直接“望文生義”地將其翻譯為錯誤碼。錯誤碼是干嗎的?大伙應(yīng)該知道 HTTP 中的錯誤代碼,如我們經(jīng)??吹降?404- not found,道理也是一樣的, SOAP 消息中的錯誤碼就是用來對某一類錯誤進(jìn)行標(biāo)識的,通常用一些簡潔的短語,以便于識別。比如,一個錯誤命名為(錯誤碼)RPTooLow,你一看到這條錯誤,就知道是因?yàn)橛脩舻娜似诽疃鴮?dǎo)致操作失敗。

Fault code的命名就是一個字符串,你可以自己來取,當(dāng)然應(yīng)當(dāng)取一些有意義的名字,不能只有你自己看得懂而別人摸不著頭腦,除非你的應(yīng)用程序不打算對外公開錯誤信息。

在 WCF 中,可以用 FaultCode 類來定義錯誤碼,然后把該類的實(shí)例傳遞給 FaultException 的構(gòu)造函數(shù)就 OK 了。 

 

下面老周舉一個例子,假設(shè)有一個服務(wù),它的功能是計算一個整數(shù)值的平方。其服務(wù)協(xié)定聲明如下。

    [ServiceContract]    public interface IDemo
    {
  &nb