亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

WCF服務創建與拋出強類型SOAP Fault

2019-11-17 01:50:14
字體:
來源:轉載
供稿:網友

WCF服務創建與拋出強類型SOAP Fault

原創地址:http://www.49028c.com/jfzhu/p/4060666.html

轉載請注明出處

前面的文章《WCF服務的異常消息》中介紹過,如果WCF Service發生異常時,Service會將異常序列化為SOAP Fault并發送給客戶端。

默認情況下,出于安全原因,WCF Service中未處理的異常的詳細信息不會包括在發送給客戶的SOAP Fault里,你只能看到一個通用的SOAP Fault(“The server was unable to PRocess the request due to an internal error.”)。在調試程序的時候,如果想在SOAP Fault中包含異常的詳細信息,可以修改服務器的配置文件。

<behaviors>  <serviceBehaviors>    <behavior name="includeExceptionDetails">      <serviceDebug includeExceptionDetailInFaults="true" />    </behavior>  </serviceBehaviors></behaviors>

SOAP Fault是xml格式,與平臺無關。通常一個SOAP Fault包含以下節點

(1) faultcode

(2) faultstring

(3) detail

Detail節點可以用來包括自定義XML信息。

WCF Service在發生異常時應拋出FaultException或FaultException<T>,而不應該拋出.NET Exception,出于以下兩個原因:

(1)未處理的.NET Exception會使服務器與客戶端之間的channel變為Fault狀態,繼而導致client proxy無法使用。

(2).NET Exception只能被.NET平臺理解,而FaultException與平臺無關。如果想跨平臺使用,需要使用FaultException。

下面還是以中《WCF服務的異常消息》的例子來分別演示如何拋出與處理FaultException與強類型的FaultException<T>。

(一)使用FaultException

IDemoService.cs:

using System.ServiceModel;namespace WCFDemo {        [ServiceContract(Name = "IDemoService")]     public interface IDemoService     {         [OperationContract]                int Divide(int numerator, int denominator);     } }

DemoService.cs:

using System; using System.ServiceModel; using System.ServiceModel.Activation;namespace WCFDemo {     [aspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]     public class DemoService : IDemoService     {         public int Divide(int numerator, int denominator)         {             if (denominator == 0)             {                 throw new FaultException("Denominator cannot be ZERO!", new FaultCode("DivideByZeroFault"));             }             return numerator / denominator;                   }     } }

client:

private void buttonCalculate_Click(object sender, EventArgs e) {     try     {                        textBoxResult.Text = demoServiceClient.Divide(Convert.ToInt32(textBoxNumerator.Text), Convert.ToInt32(textBoxDenominator.Text)).ToString();     }     catch (FaultException fault)     {         MessageBox.Show(fault.Code + " - " + fault.Message);     } }

image

image

SOAP Fault XML

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">   <s:Body>     <s:Fault>       <faultcode>s:DivideByZeroFault</faultcode>       <faultstring xml:lang="en-US">Denominator cannot be ZERO!</faultstring>     </s:Fault>   </s:Body> </s:Envelope>

(二)使用強類型FaultException<T>

(1)創建一個自定義SOAP Fault類

DivideByZeroFault.cs:

using System.Runtime.Serialization;namespace WCFDemo {     [DataContract]     public class DivideByZeroFault     {         [DataMember]         public string Error { get; set; }        [DataMember]         public string Detail { get; set; }     } }

(2) 在Service方法上使用FaultContractAttribute來指示哪個操作可以使用哪個Fault

IDemoService.cs:

using System.ServiceModel;namespace WCFDemo {        [ServiceContract(Name = "IDemoService")]     public interface IDemoService     {         [FaultContract(typeof(DivideByZeroFault))]         [OperationContract]                int Divide(int numerator, int denominator);     } }

DemoService.cs:

using System; using System.ServiceModel; using System.ServiceModel.Activation;namespace WCFDemo {     [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]     public class DemoService : IDemoService     {         public int Divide(int numerator, int denominator)         {             try             {                 return numerator / denominator;             }             catch (DivideByZeroException ex)             {                 DivideByZeroFault fault = new DivideByZeroFault();                 fault.Error = ex.Message;                 fault.Detail = "Denominator cannot be ZERO!";                 throw new FaultException<DivideByZeroFault>(fault);             }         }     } }

client:

private void buttonCalculate_Click(object sender, EventArgs e) {     try     {                        textBoxResult.Text = demoServiceClient.Divide(Convert.ToInt32(textBoxNumerator.Text), Convert.ToInt32(textBoxDenominator.Text)).ToString();     }     catch (FaultException<DemoServiceReference.DivideByZeroFault> fault)     {         MessageBox.Show(fault.Detail.Error + " - " + fault.Detail.Detail);     } }

image

image

返回的SOAP Fault XML:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">   <s:Body>     <s:Fault>       <faultcode>s:Client</faultcode>       <faultstring xml:lang="en-US">The creator of this fault did not specify a Reason.</faultstring>       <detail>         <DivideByZeroFault xmlns="http://schemas.datacontract.org/2004/07/WCFDemo" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">           <Detail>Denominator cannot be ZERO!</Detail>           <Error>Attempted to divide by zero.</Error>         </DivideByZeroFault>       </detail>     </s:Fault>   </s:Body> </s:Envelope>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人网在线观看| 欧美成人久久久| 久久久久免费视频| 欧美激情小视频| 成人国产精品色哟哟| 国产精品视频久久久久| 亚洲一区二区三区香蕉| 欧美大成色www永久网站婷| 夜夜嗨av色一区二区不卡| 亚洲美女又黄又爽在线观看| 欧美野外猛男的大粗鳮| 91精品91久久久久久| 国产一区香蕉久久| 日韩欧美一区视频| 欧美老肥婆性猛交视频| 精品国内产的精品视频在线观看| 亚洲图片制服诱惑| 亚洲视频在线播放| 亚洲自拍偷拍区| 欧美特级www| 91在线观看免费观看| 国产精品手机播放| 亚洲综合中文字幕在线| 亚洲影视中文字幕| 亚洲欧洲在线播放| 欧美性jizz18性欧美| 日韩在线视频观看| 欧美日韩亚洲精品一区二区三区| 日韩欧美在线视频日韩欧美在线视频| 日本精品久久久久影院| www.精品av.com| 成人国产精品色哟哟| 亚洲一区中文字幕| 在线日韩中文字幕| 欧美视频国产精品| 中文字幕在线精品| 国产成人高潮免费观看精品| 国产成人一区二| 国产精品视频网址| 成人免费视频在线观看超级碰| 欧美激情va永久在线播放| 91精品视频在线免费观看| 国产精品观看在线亚洲人成网| 姬川优奈aav一区二区| 91国产精品91| 亚洲乱码一区av黑人高潮| 成人欧美一区二区三区黑人| 久久精品电影一区二区| 欧美激情精品久久久久久久变态| 大胆人体色综合| 欧美巨猛xxxx猛交黑人97人| 精品国产一区二区在线| 91亚洲精品久久久久久久久久久久| 欧美精品一本久久男人的天堂| 亚洲精品一区中文字幕乱码| 亚洲色无码播放| 黄色成人av在线| 亚洲人成在线免费观看| 国产成人一区二区在线| 亚洲已满18点击进入在线看片| 日韩精品在线观看视频| 亚洲www永久成人夜色| 日韩av在线免费观看一区| 日韩福利视频在线观看| 成人午夜在线观看| 88国产精品欧美一区二区三区| 在线视频一区二区| 97视频免费看| 欧洲亚洲妇女av| 黄色一区二区在线| 日韩专区在线观看| 久久午夜a级毛片| 亚洲欧美日韩天堂一区二区| 菠萝蜜影院一区二区免费| 久久五月情影视| 亚洲精品福利视频| 久久影院资源网| 国产精品一香蕉国产线看观看| 亚州成人av在线| 国产精品成人品| 亚洲视频网站在线观看| 97人人模人人爽人人喊中文字| 日韩极品精品视频免费观看| 亚洲高清久久网| 国产精品主播视频| 国产香蕉一区二区三区在线视频| 欧美超级免费视 在线| 日韩一区二区精品视频| 欧美成aaa人片免费看| 深夜福利国产精品| 色狠狠av一区二区三区香蕉蜜桃| 九九热精品视频国产| 91精品视频播放| 欧美日韩综合视频| 国产v综合ⅴ日韩v欧美大片| 91热精品视频| 日韩av电影在线播放| 国产日韩在线看片| 亚洲视频axxx| 日韩在线观看视频免费| 日韩免费不卡av| 久久青草精品视频免费观看| 精品久久久久久久大神国产| 欧美孕妇孕交黑巨大网站| 色av吧综合网| 国产精品久久97| 国产精品久久久久久久app| 午夜精品久久久久久久99黑人| 91综合免费在线| 国产午夜精品一区理论片飘花| 欧美另类在线播放| 亚洲天堂影视av| 精品国产自在精品国产浪潮| 久久色在线播放| 亚洲欧美激情精品一区二区| 深夜福利一区二区| 97视频人免费观看| 成人免费高清完整版在线观看| 精品视频一区在线视频| 精品国产一区二区三区久久久| 久久国产精品久久久久久久久久| 成人免费看吃奶视频网站| 韩国19禁主播vip福利视频| 久久人人爽人人爽爽久久| 久久影视电视剧免费网站清宫辞电视| 久久免费精品日本久久中文字幕| 91在线国产电影| 91国在线精品国内播放| 国产视频久久久| 搡老女人一区二区三区视频tv| 97超碰蝌蚪网人人做人人爽| 4444欧美成人kkkk| 免费av在线一区| 亚洲成人激情小说| 97热在线精品视频在线观看| 国产欧美精品一区二区| 国产日产欧美精品| 国产999精品久久久影片官网| 日本欧美一二三区| 国产精品久久久久久久午夜| 日韩欧美第一页| 欧美丰满片xxx777| 色噜噜亚洲精品中文字幕| 在线性视频日韩欧美| 日韩在线免费观看视频| 国产91精品视频在线观看| 国产成人亚洲精品| 亚洲女人天堂网| 日产精品久久久一区二区福利| 欧美电影在线观看网站| 狠狠躁夜夜躁人人爽天天天天97| 欧美日韩一区二区精品| 亚洲欧美日韩中文视频| 日韩欧美一区二区三区久久| 91亚洲精品一区| 国产精品99免视看9| 黑人狂躁日本妞一区二区三区| 深夜成人在线观看| 国产日韩综合一区二区性色av| 在线日韩欧美视频| 日韩精品中文字幕在线播放| 97久久超碰福利国产精品…| 国自在线精品视频| 午夜精品三级视频福利|