WCF客户端获取服务端异常[自定义异常]
引言
经过不断的摸索,询问/调试,终于学会了关于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 enum ResponseCode
- {
- /// <summary>
- /// 成功 8200
- /// </summary>
- Success = ,
- /// <summary>
- /// 用户不存在 8300
- /// </summary>
- UserNotExist = ,
- /// <summary>
- /// 用户无效 8301
- /// </summary>
- UserInvalid = ,
- /// <summary>
- /// 密码错误 8302
- /// </summary>
- PasswordError = ,
- /// <summary>
- /// Token无效 8303
- /// </summary>
- TokenInvalid = ,
- /// <summary>
- /// 非用户绑定号码 8304
- /// </summary>
- NotBingMobile = ,
- /// <summary>
- /// 原始密码输入错误 8305
- /// </summary>
- OldPasswordError = ,
- /// <summary>
- /// 用户名已经存在
- /// </summary>
- LoginNameExist = ,
- /// <summary>
- /// 用户昵称已经存在
- /// </summary>
- NickNameExist = ,
- /// <summary>
- /// 未找到资源
- /// </summary>
- NotFound = ,
- /// <summary>
- /// 服务内部错误 8500
- /// </summary>
- ServerInternalError = ,
- /// <summary>
- /// WCF服务内部错误
- /// </summary>
- WcfServiceError = ,
- /// <summary>
- /// 缺少参数
- /// </summary>
- MissParam = ,
- /// <summary>
- /// 参数值无效
- /// </summary>
- ParamValueInvalid = ,
- /// <summary>
- /// 非法参数(值)
- /// </summary>
- IllegalParam = ,
- /// <summary>
- /// 接口返回对象为空
- /// </summary>
- ResDataIsEmpty = ,
- /// <summary>
- /// 数据已经存在,通用
- /// </summary>
- DataExist =
- }
ResponseCode
- /// <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
服务端抛出异常
客户端捕获异常
(ResponseCode)(Enum.Parse(typeof(ResponseCode),ex.Code.Name))//这一条只是将捕获的异常信息重新返回为枚举类型对象的值而已,不用枚举可以直接使用ex.Code.Name
运行结果
WCF客户端获取服务端异常[自定义异常]的更多相关文章
- 客户端获取服务端自定义类数据 z
客户端获取服务端自定义类数据 问题一:超时问题,在最后获取数据的时候突然提示服务超时,服务已断开 解决:配置文件添加: <bindings> <wsHttpBinding> & ...
- WCF 客户端与服务端消息传输
WCF很多需要认证信息,保证服务的安全,可以使用消息来实现 WCF 实现消息的方式: WCF中有两个接口: IClientMessageInspector [定义一个消息检查器对象,该对象可以添加到 ...
- WCF学习心得--客户端获取服务端自定义类数据
因项目需求,需要一个WCF服务,赶鸭子上架吧!下面直接切入正题! 首先创建WCF应用程序,具体如何创建就不赘述了,网上一大篇,我主要说说自己遇到的问题 问题一:超时问题,在最后获取数据的时候突然提示服 ...
- WCF客户端与服务端通信简单入门教程
服务端 1.新建空白解决方案,然后再空白解决方案中新建:WCF服务应用程序.建完后如图: 2.删掉自动生成的IService1.cs和Service.svc并添加WCF服务文件StudentServi ...
- WCF客户端和服务端配置
服务端: <system.serviceModel> <services> <service name="Microsoft.ServiceModel.Samp ...
- WCF初探-10:WCF客户端调用服务
创建WCF 服务客户端应用程序需要执行下列步骤: 获取服务终结点的服务协定.绑定以及地址信息 使用该信息创建 WCF 客户端 调用操作 关闭该 WCF 客户端对象 WCF客户端调用服务存在以下特点: ...
- WCF 服务端异常封装
通常WCF服务端异常的详细信息只有在调试环境下才暴露出来,但我目前有需求需要将一部分异常的详细信息传递到客户端,又需要保证一定的安全性. 最简单的办法当然是在服务端将异常捕获后,序列化传给客户端,但这 ...
- WCF心跳判断服务端及客户端是否掉线并实现重连接
WCF心跳判断服务端及客户端是否掉线并实现重连接 本篇文章将通过一个实例实现对WCF中针对服务端以及客户端是否掉线进行判断:若掉线时服务器或客户端又在线时将实现自动重连:将通过WCF的双工知识以及相应 ...
- asp.net获取服务端和客户端信息
asp.net获取服务端和客户端信息 获取服务器名:Page.Server.ManchineName获取用户信息:Page.User 获取客户端电脑名:Page.Request.UserHostNam ...
随机推荐
- Activiti Modeler 5.22.0整合到Spring项目
转载 https://blog.csdn.net/u010411264/article/details/71480354
- CDR 2017版本LiveSketch工具是什么,怎么用?
LiveSketch 工具在提供手绘草图的简便性和速度的同时,结合了智能笔触调整和向量绘图.在您绘制草图时,CorelDRAW 2017会分析您输入笔触的属性.时序和空间接近度,对其进行调整并将其转换 ...
- JS怎样写闰年
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 面试题sql
查询书的价格10到20 之前显示10to20 没有显示unknown CREATE TABLE book(price INT,NAME VARCHAR(20)) SELECT NAME AS '名字' ...
- 多进程Socket_Server
import socketserverclass MyServer(socketserver.BaseRequestHandler): def handle(self): #继承BaseRequest ...
- Java 面向对象详解
0 引言 接触项目开发也有很长一段时间了,最近开始萌发出想回过头来写写以前学过的基础知识的想法. 1 面向对象 面向对象(Object Oriented)是一种新兴的程序设计方法,或者是一种新的程序设 ...
- C语言基本语法——字符串
1.什么是字符串 2.字符串与普通字符数组的区别 3.字符串的定义方式 4.字符串的使用 5.什么是字符串数组 6.字符串数组的赋值 7.字符串数组的遍历 1.什么是字符串 • 用双引号引起来的多个字 ...
- [Codeforces 226E]Noble Knight's Path
题目大意:有一棵n个节点的树,m年.初始每个节点都有.每天有如下操作:1. 给定c,让c没有(c只可能没有一次).2. 给定s,t,k,y,求从第y+1年到现在(即忽略y+1年之前的操作1),s到t的 ...
- shell试题
1.按单词出现频率降序排序! 2.按字母出现频率降序排序! The months of learning in Old Boy education are the few months that I ...
- vuejs 基础总结(one)
vuejs 入门知识点 1.active-class 是哪个组件的属性?嵌套路由怎么定义 (1).active-class 是 vue-router 模块的 router-link 组件的属性 (2) ...