利用WCF实现将服务器端的错误信息返回

开发 后端
默认WCF是不允许将服务器的异常信息返回到客户端的,那么今天我们将谈谈如何实现服务器端的错误信息返回。

  最近在园子里转看到有人对如题的实现有疑问,今天有时间就写了项目把实现简单的讲解一下,如果你是牛逼人物那就绕道吧,哥不想浪费你的时间,现在开始:

  默认WCF是不允许将服务器的异常信息返回到客户端的(主要是客户端不一定能够识别clr的异常信息),如果你有这方面的需求可以通过SOAP的Fault包的形式返回异常信息,首先要做的就是设置配置文件,将默认不允许返回错误信息的设置改成如下:

  <behaviors>

  <serviceBehaviors>

  <behavior name="Bhc">

  <serviceMetadata httpGetEnabled="true"/>

  <serviceDebug includeExceptionDetailInFaults="true"/><!--如此設置會將服務器端得錯誤返回到客戶端,實際的發佈中需要將此項目設置成false-->

  </behavior>

  </serviceBehaviors>

  </behaviors>

  然后定义承载信息的DataContract

  [DataContract]

  publicclassErro

  {

  [DataMember]

  publicstringMessage

  {

  get;set;

  }

  }

  上边的代码 就不用介绍了 就是一个数据合同

  //服務契約定義了可以遠程調用的對象和方法//定義服務契約

  [XmlSerializerFormat]//定義序列化的方式

  [ServiceContract(SessionMode = SessionMode.Allowed)]//SessionMode = SessionMode.Allowed:設置此屬性意味著可以使用會話Binding

  publicinterfaceIActionMain

  {

  //定義操作契約

  [DataContractFormat]//定義序列化的方式

  [OperationContract]

  stringGetName(stringpInc);

  [FaultContract(typeof(ErroInfo.Erro))]//如果有異常就返回下面定義的數據契約的結構數據

  [FaultContract(typeof(DivideByZeroException))]

  [OperationContract]

  DataCollection Return();

  }

  在方法中定义属性,这里有两种实现

  1.使用自定义的错误类型

  [FaultContract(typeof(ErroInfo.Erro))]//如果有異常就返回下面定義的數據契約的結構數據

  2.使用系统的异常类型 [FaultContract(typeof(DivideByZeroException))]

  在契约实现类中将异常抛出

  thrownewFaultException<DivideByZeroException>(newDivideByZeroException("這個是自定義的異常!"));

  到此服务器端的实现完成。

  下边看客户端的实现

  配置文件不需要特殊设置,调用函数,抓取异常,代码如下:

  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:这个抓取的是定义的异常类型。

  FaultException<DivideByZeroException> exception:这个抓取的是系统异常类型

  注意这里获取异常的信息的方法是exception.Detail.Message,而不是Message。

原文链接:http://www.cnblogs.com/Ref-tian/archive/2011/12/21/2295602.html

【编辑推荐】

  1. 5月***超有趣的免费jQuery插件推荐
  2. 从零开始学习jQuery之管理jQuery包装集
  3. jQuery性能指标和调优
  4. 手把手教你jQuery jqPlot画图插件
  5. 从零开始学习jQuery之***的选择器
责任编辑:彭凡 来源: 博客园
相关推荐

2012-12-27 15:36:19

Android开发错误处理

2011-02-21 13:41:20

Postfix问题错误

2013-12-25 11:01:16

JavaScript

2010-03-10 14:34:52

Python异常处理

2023-08-27 08:57:31

2014-01-15 10:06:30

vFlash

2023-10-27 11:27:28

2012-10-15 13:40:15

IBMdw

2009-04-20 09:09:46

PHP错误信息错误代码

2015-10-27 09:40:31

TCPIP网络协议

2023-11-27 00:39:46

2010-08-27 10:23:26

DHCP服务器

2015-11-04 14:14:56

HTTP网络协议

2011-06-07 16:01:46

Android 服务器 数据交互

2017-12-06 22:29:53

2014-11-14 11:03:56

微软.NET

2023-06-30 08:00:00

漏洞网络安全SSTI

2010-11-02 17:01:09

DB2客户端远程连接

2021-07-27 06:14:32

服务器端移动端性能测试

2022-05-07 15:54:56

小熊派鸿蒙
点赞
收藏

51CTO技术栈公众号