WCF客户端获取服务端异常[自定义异常]
2015-09-16 11:20
176 查看
引言
经过不断的摸索,询问/调试,终于学会了关于WCF客户端与服务端之间异常的处理机制,在此来记录自己的成果,用于记录与分享给需要的伙伴们。
首先感谢【.NET技术群】里群主【轩】的大力帮助,如有需要大家也请欢迎加入【.NET技术群】(群号:199281001),一起讨论交流.NET技术(ASP.NET MVC4、MVC5/C#/WPF/WCF),但愿大家在技术上有更多的成就,废话不多说,直接开始分享。
关于WCF服务端的原生抛出异常,我就不多说了,相信大家找到这篇博文的时候,已经尝试过诸多方法了,其中最简单的抛出原生的异常直接在[web.config]中配置[红字部分]中的false改为true就可以捕获抛出的异常
报告意外预料之外的异常
在你开发WCF服务时,为了在客户端程序调试,将会把服务端发生的所有异常(包括预料之内的和预料之外的)转换成SOAP faults消息传送至客户端是非常有用的。
调试的时候将WCF服务的配置文件 设置为true,等正式上线的时候设置为false
捕获自定义异常处理
首先,先附上自定义设计的异常类ResponseCode[异常代码]CustomException[自定义异常]
CustomException
当我们需要客户端获取到WCF服务端的抛出的异常的时候,使用FaultException类
WCF类库在System.ServiceModel命名空间下提供了FaultException类。如果WCF服务抛出FaultException对象,WCF运行时将生成SOAP fault消息并回传给客户端程序。
这个处理自定义异常的时候,并不需要把上述<serviceDebug includeExceptionDetailInFaults="false" />中的false改为true
服务端抛出异常
![](http://images2015.cnblogs.com/blog/686807/201509/686807-20150916110942789-692416070.png)
客户端捕获异常
![](http://images2015.cnblogs.com/blog/686807/201509/686807-20150916111626117-935371885.png)
(ResponseCode)(Enum.Parse(typeof(ResponseCode),ex.Code.Name))//这一条只是将捕获的异常信息重新返回为枚举类型对象的值而已,不用枚举可以直接使用ex.Code.Name
运行结果
经过不断的摸索,询问/调试,终于学会了关于WCF客户端与服务端之间异常的处理机制,在此来记录自己的成果,用于记录与分享给需要的伙伴们。
首先感谢【.NET技术群】里群主【轩】的大力帮助,如有需要大家也请欢迎加入【.NET技术群】(群号:199281001),一起讨论交流.NET技术(ASP.NET MVC4、MVC5/C#/WPF/WCF),但愿大家在技术上有更多的成就,废话不多说,直接开始分享。
关于WCF服务端的原生抛出异常,我就不多说了,相信大家找到这篇博文的时候,已经尝试过诸多方法了,其中最简单的抛出原生的异常直接在[web.config]中配置[红字部分]中的false改为true就可以捕获抛出的异常
报告意外预料之外的异常
在你开发WCF服务时,为了在客户端程序调试,将会把服务端发生的所有异常(包括预料之内的和预料之外的)转换成SOAP faults消息传送至客户端是非常有用的。
调试的时候将WCF服务的配置文件 设置为true,等正式上线的时候设置为false
<behaviors> <serviceBehaviors> <behavior> <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false --> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 --> <serviceDebug includeExceptionDetailInFaults="false" /> </behavior> </serviceBehaviors> </behaviors>
捕获自定义异常处理
首先,先附上自定义设计的异常类ResponseCode[异常代码]CustomException[自定义异常]
/// <summary> /// 逻辑异常 /// </summary> public class CustomException : Exception { public CustomException(ResponseCode code) { this.Code = code; } public CustomException(ResponseCode code, string msg) { this.Code = code; this.Msg = msg; } private string _msg; public ResponseCode Code { get; private set; } public string Msg { get { return _msg; } set { _msg = value ?? ""; } } }
CustomException
当我们需要客户端获取到WCF服务端的抛出的异常的时候,使用FaultException类
WCF类库在System.ServiceModel命名空间下提供了FaultException类。如果WCF服务抛出FaultException对象,WCF运行时将生成SOAP fault消息并回传给客户端程序。
这个处理自定义异常的时候,并不需要把上述<serviceDebug includeExceptionDetailInFaults="false" />中的false改为true
服务端抛出异常
![](http://images2015.cnblogs.com/blog/686807/201509/686807-20150916110942789-692416070.png)
客户端捕获异常
![](http://images2015.cnblogs.com/blog/686807/201509/686807-20150916111626117-935371885.png)
(ResponseCode)(Enum.Parse(typeof(ResponseCode),ex.Code.Name))//这一条只是将捕获的异常信息重新返回为枚举类型对象的值而已,不用枚举可以直接使用ex.Code.Name
运行结果
![](http://images2015.cnblogs.com/blog/686807/201509/686807-20150916111905789-1499182713.png)
相关文章推荐
- 申请邓白氏编码
- POJ 1821 Fence
- Java泛型中的通配符的使用
- AndroidMediaPlayer.prepare已经报错解决办法
- python sorted()函数解析
- Intent传递参数方法推荐
- iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
- linux加密解密基础、PKI及SSL、创建私有CA
- Eclipse快捷键
- 副本集指南(目录)
- 剑指Offer系列---(24)栈的压入、弹出序列
- Xcode模拟器simulators8,7,6,5下载地址及安装
- abap ALV多级汇总
- 基于 jenkins 和 docker 的持续集成平台
- iphone系列高清屏1像素变2像素问题
- IOS--基础知识--AutoLayout资料收集
- cocos2d-lua 3.5 android搭建常见错误
- How to embed Oracle hints in Hibernate query
- java设计模式系列--工厂模式
- 轻量级批量运维工具Omnitty的安装及使用