新聞中心
最近在園子里轉(zhuǎn)看到有人對如題的實現(xiàn)有疑問,今天有時間就寫了項目把實現(xiàn)簡單的講解一下,如果你是牛逼人物那就繞道吧,哥不想浪費你的時間,現(xiàn)在開始:

創(chuàng)新互聯(lián)專注于和平企業(yè)網(wǎng)站建設(shè),響應式網(wǎng)站,商城系統(tǒng)網(wǎng)站開發(fā)。和平網(wǎng)站建設(shè)公司,為和平等地區(qū)提供建站服務。全流程定制網(wǎng)站開發(fā),專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務
默認WCF是不允許將服務器的異常信息返回到客戶端的(主要是客戶端不一定能夠識別clr的異常信息),如果你有這方面的需求可以通過SOAP的Fault包的形式返回異常信息,首先要做的就是設(shè)置配置文件,將默認不允許返回錯誤信息的設(shè)置改成如下:
然后定義承載信息的DataContract
[DataContract]
publicclassErro
{
[DataMember]
publicstringMessage
{
get;set;
}
}
上邊的代碼 就不用介紹了 就是一個數(shù)據(jù)合同
//服務契約定義了可以遠程調(diào)用的對象和方法//定義服務契約
[XmlSerializerFormat]//定義序列化的方式
[ServiceContract(SessionMode = SessionMode.Allowed)]//SessionMode = SessionMode.Allowed:設(shè)置此屬性意味著可以使用會話Binding
publicinterfaceIActionMain
{
//定義操作契約
[DataContractFormat]//定義序列化的方式
[OperationContract]
stringGetName(stringpInc);
[FaultContract(typeof(ErroInfo.Erro))]//如果有異常就返回下面定義的數(shù)據(jù)契約的結(jié)構(gòu)數(shù)據(jù)
[FaultContract(typeof(DivideByZeroException))]
[OperationContract]
DataCollection Return();
}
在方法中定義屬性,這里有兩種實現(xiàn)
1.使用自定義的錯誤類型
[FaultContract(typeof(ErroInfo.Erro))]//如果有異常就返回下面定義的數(shù)據(jù)契約的結(jié)構(gòu)數(shù)據(jù)
2.使用系統(tǒng)的異常類型 [FaultContract(typeof(DivideByZeroException))]
在契約實現(xiàn)類中將異常拋出
thrownewFaultException
到此服務器端的實現(xiàn)完成。
下邊看客戶端的實現(xiàn)
配置文件不需要特殊設(shè)置,調(diào)用函數(shù),抓取異常,代碼如下:
try
{
returnthis.Channel.Return();
}
catch(FaultException
{
thrownewException(exception.Detail.Message);
}
catch(FaultException
{
thrownewException(exception.Detail.Message);
}
FaultException
FaultException
注意這里獲取異常的信息的方法是exception.Detail.Message,而不是Message。
原文鏈接:http://www.cnblogs.com/Ref-tian/archive/2011/12/21/2295602.html
網(wǎng)站欄目:利用WCF實現(xiàn)將服務器端的錯誤信息返回
標題URL:http://fisionsoft.com.cn/article/cddsejj.html


咨詢
建站咨詢
