您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“如何利用WCF實(shí)現(xiàn)將服務(wù)器端的錯(cuò)誤信息返回”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何利用WCF實(shí)現(xiàn)將服務(wù)器端的錯(cuò)誤信息返回”吧!
最近在園子里轉(zhuǎn)看到有人對如題的實(shí)現(xiàn)有疑問,今天有時(shí)間就寫了項(xiàng)目把實(shí)現(xiàn)簡單的講解一下,如果你是牛逼人物那就繞道吧,哥不想浪費(fèi)你的時(shí)間,現(xiàn)在開始:
默認(rèn)WCF是不允許將服務(wù)器的異常信息返回到客戶端的(主要是客戶端不一定能夠識(shí)別clr的異常信息),如果你有這方面的需求可以通過SOAP的Fault包的形式返回異常信息,首先要做的就是設(shè)置配置文件,將默認(rèn)不允許返回錯(cuò)誤信息的設(shè)置改成如下:
<behaviors>
<serviceBehaviors>
<behavior name="Bhc">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/><!--如此設(shè)置會(huì)將服務(wù)器端得錯(cuò)誤返回到客戶端,實(shí)際的發(fā)佈中需要將此項(xiàng)目設(shè)置成false-->
</behavior>
</serviceBehaviors>
</behaviors>
然后定義承載信息的DataContract
[DataContract]
publicclassErro
{
[DataMember]
publicstringMessage
{
get;set;
}
}
上邊的代碼 就不用介紹了 就是一個(gè)數(shù)據(jù)合同
//服務(wù)契約定義了可以遠(yuǎn)程調(diào)用的對象和方法//定義服務(wù)契約
[XmlSerializerFormat]//定義序列化的方式
[ServiceContract(SessionMode = SessionMode.Allowed)]//SessionMode = SessionMode.Allowed:設(shè)置此屬性意味著可以使用會(huì)話Binding
publicinterfaceIActionMain
{
//定義操作契約
[DataContractFormat]//定義序列化的方式
[OperationContract]
stringGetName(stringpInc);
[FaultContract(typeof(ErroInfo.Erro))]//如果有異常就返回下面定義的數(shù)據(jù)契約的結(jié)構(gòu)數(shù)據(jù)
[FaultContract(typeof(DivideByZeroException))]
[OperationContract]
DataCollection Return();
}
在方法中定義屬性,這里有兩種實(shí)現(xiàn)
1.使用自定義的錯(cuò)誤類型
[FaultContract(typeof(ErroInfo.Erro))]//如果有異常就返回下面定義的數(shù)據(jù)契約的結(jié)構(gòu)數(shù)據(jù)
2.使用系統(tǒng)的異常類型 [FaultContract(typeof(DivideByZeroException))]
在契約實(shí)現(xiàn)類中將異常拋出
thrownewFaultException<DivideByZeroException>(newDivideByZeroException("這個(gè)是自定義的異常!"));
到此服務(wù)器端的實(shí)現(xiàn)完成。
下邊看客戶端的實(shí)現(xiàn)
配置文件不需要特殊設(shè)置,調(diào)用函數(shù),抓取異常,代碼如下:
try
{
returnthis.Channel.Return();
}
catch(FaultException<ErroInfo.Erro> exception)
{
thrownewException(exception.Detail.Message);
}
catch(FaultException<DivideByZeroException> exception)
{
thrownewException(exception.Detail.Message);
}
FaultException<ErroInfo.Erro> exception:這個(gè)抓取的是定義的異常類型。
FaultException<DivideByZeroException> exception:這個(gè)抓取的是系統(tǒng)異常類型
注意這里獲取異常的信息的方法是exception.Detail.Message,而不是Message。
原文鏈接:http://www.cnblogs.com/Ref-tian/archive/2011/12/21/2295602.html
到此,相信大家對“如何利用WCF實(shí)現(xiàn)將服務(wù)器端的錯(cuò)誤信息返回”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。