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 ...
随机推荐
- 「JavaSE 重新出发」05.01.01 equals 方法
equals 方法示例 // 代码来自<Java核心技术 卷I>P167 // 父类 public class Employee{ ... public boolean equals(Ob ...
- C#中方向键与回车键切换控件焦点
环境:界面上有TextBox,ComboBox等控件. 不建议把左右方向键都用来切换焦点,否则你在TextBox里面改变光标所在字符位置就不方便了. 方法一:笨方法,需为每个控件单独注册事件处理 以T ...
- 5G商用时代来临!这些产业将发生变革
5G商用时代来临!这些产业将发生变革 值得注意的是,在获得工信部发放的5G网络试验频率后,三大运营商已在各大城市建设5G基站,开展5G外场测试.华为亦适时表示,已经在中国40多个城市与中国三大运营商开 ...
- Python介绍与学习
Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python是纯粹的自由软件, 源代码和解释器CPy ...
- CF1041E Tree Reconstruction_构造_思维题
不难发现,每次询问结果一定是 (i,n)(i,n)(i,n), 而 iii 出现的次数恰好是 iii 到 i′i'i′ 的距离(i′i'i′ 是第一个不与 iii 相等的数).我们可以将这颗树构造成一 ...
- JS 日历
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...
- 阿里云Linux系统安装配置Tomcat方法
本文将tomcat安装到了/alidata/server/目录下,当然也可以安装到其他目录. 1. 下载tomcat:#wget http://apache.fayea.com/tomcat/tomc ...
- Spring Cloud Feign 出现ClassNotFoundException: feign.Feign$Builder错误
Spring Cloud Feign 出现ClassNotFoundException: feign.Feign$Builder错误 后来发现是POM文件写错了,修改为正确的pom,就可以了: POM ...
- Eureka Server的REST端点
Eureka Server的REST端点 Windows下面可以安装Curl: 使用more命令可以显示xml内容: D:\Java\IdeaProjects>more rest-api-tes ...
- hdu5351
题目名称:MZL's Border 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5351 题意:给出fib 1 = b,fib2 = a ; fib ...