WCF服务全局异常处理机制
服务端增加WCF服务全局异常处理机制,任一WCF服务或接口方式出现异常,将统一调用WCF_ExceptionHandler.ProvideFault方法,因此不需要每个方法使用try catch写法。

1 /// <summary>
2 /// WCF服务端异常处理器
3 /// </summary>
4 public class WCF_ExceptionHandler : IErrorHandler
5 {
6 #region IErrorHandler Members
7
8 /// <summary>
9 /// HandleError
10 /// </summary>
11 /// <param name="ex">ex</param>
12 /// <returns>true</returns>
13 public bool HandleError(Exception ex)
14 {
15 return true;
16 }
17
18 /// <summary>
19 /// ProvideFault
20 /// </summary>
21 /// <param name="ex">ex</param>
22 /// <param name="version">version</param>
23 /// <param name="msg">msg</param>
24 public void ProvideFault(Exception ex, MessageVersion version, ref Message msg)
25 {
26 //
27 //在这里处理服务端的消息,将消息写入服务端的日志
28 //
29 string err = string.Format("调用WCF接口 '{0}' 出错", ex.TargetSite.Name) ",详情:\r\n" ex.Message;
30 var newEx = new FaultException(err);
31
32 MessageFault msgFault = newEx.CreateMessageFault();
33 msg = Message.CreateMessage(version, msgFault, newEx.Action);
34 }
35
36 #endregion
37 }
38


1 /// <summary>
2 /// WCF服务类的特性
3 /// </summary>
4 public class WCF_ExceptionBehaviourAttribute : Attribute, IServiceBehavior
5 {
6 private readonly Type _errorHandlerType;
7
8 public WCF_ExceptionBehaviourAttribute(Type errorHandlerType)
9 {
10 _errorHandlerType = errorHandlerType;
11 }
12
13 #region IServiceBehavior Members
14
15 public void Validate(ServiceDescription description,
16 ServiceHostBase serviceHostBase)
17 {
18 }
19
20 public void AddBindingParameters(ServiceDescription description,
21 ServiceHostBase serviceHostBase,
22 Collection<ServiceEndpoint> endpoints,
23 BindingParameterCollection parameters)
24 {
25 }
26
27 public void ApplyDispatchBehavior(ServiceDescription description,
28 ServiceHostBase serviceHostBase)
29 {
30 var handler =
31 (IErrorHandler)Activator.CreateInstance(_errorHandlerType);
32
33 foreach (ChannelDispatcherBase dispatcherBase in
34 serviceHostBase.ChannelDispatchers)
35 {
36 var channelDispatcher = dispatcherBase as ChannelDispatcher;
37 if (channelDispatcher != null)
38 channelDispatcher.ErrorHandlers.Add(handler);
39 }
40 }
41
42 #endregion
43 }
44

使用:

1 [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
2 [WCF_ExceptionBehaviour(typeof(WCF_ExceptionHandler))]
3 public class AccountModuleService : IAccountModuleService
4 {
5
6
7 }

WCF服务全局异常处理机制的更多相关文章
- 服务端增加WCF服务全局异常处理机制
服务端增加WCF服务全局异常处理机制,任一WCF服务或接口方式出现异常,将统一调用WCF_ExceptionHandler.ProvideFault方法,因此不需要每个方法使用try catch写法. ...
- WCF服务全局统一异常处理机制
转载:http://www.csframework.com/archive/1/arc-1-20150109-2193.htm 服务端增加WCF服务全局异常处理机制,任一WCF服务或接口方式出现异常, ...
- ASP.NET Core 中间件的使用(三):全局异常处理机制
前言 我们经常听到"秒修复秒上线",觉得很厉害的样子. 其实不然,这只是一个调侃而已,出现问题的方式很多(逻辑漏洞.代码异常.操作方式不正确等). 我们今天来说代码异常问题怎么快速 ...
- Spring Boot 2.x 系列教程:WebFlux REST API 全局异常处理 Error Handling
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 本文内容 为什么要全局异常处理? WebFlux REST 全 ...
- Spring Boot 2 Webflux的全局异常处理
https://www.jianshu.com/p/6f631f3e00b9 本文首先将会回顾Spring 5之前的SpringMVC异常处理机制,然后主要讲解Spring Boot 2 Webflu ...
- SpringMVC 全局异常处理
在 JavaEE 项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合度 ...
- Spring Cloud微服务如何设计异常处理机制?
导读 今天和大家聊一下在采用Spring Cloud进行微服务架构设计时,微服务之间调用时异常处理机制应该如何设计的问题.我们知道在进行微服务架构设计时,一个微服务一般来说不可避免地会同时面向内部和外 ...
- WCF全局异常处理
在用wcf做为单纯的服务端的时候,发生错误是常有的事情,特别是在调用其他系统提供的接口的时候,发生的一些错误总是让人摸不着头脑,严重影响了错误的定位.做.net web开发的时候,我们可以在Globa ...
- 花了三天整理,Spring Cloud微服务如何设计异常处理机制?还看不懂算我输
前言 首先说一下为什么发这篇文章,是这样的.之前和粉丝聊天的时候有聊到在采用Spring Cloud进行微服务架构设计时,微服务之间调用时异常处理机制应该如何设计的问题.我们知道在进行微服务架构设计时 ...
随机推荐
- vuex vue状态管理
第一步安装vuex(安装在生产环境) npm install vuex 第二步 src下新建store文件夹 用来专门放状态管理,store文件夹下新建四个js文件 index.js actions ...
- python selenuim如何判断下拉框是否加载出来,超过时间不再等待
s_flag = True time_start = time.time() while s_flag: doc = etree.HTML(unicode.encode(driver.page_sou ...
- .net core 发布到docker
1. 安装docker-desktop,windows环境安装包 官方网站:https://www.docker.com/ 2.注册登陆Docker账号 安装成功后,在官方网站注册一个账号,使用账号登 ...
- linux总结及常用命令
一.操作系统的作用: 1.是现代计算机系统中最基本和最重要的系统软件 2.承上启下的作用 3.向下对硬件操作进行封装 4.向上对用户和应用程序提供方便访问硬件的接口 二.不同领域的操作系统: 1 ...
- PHP中的面向对象魔术方法大全
1.__construct 构造方法 2.__destruct 析构方法 3.__get 获取成员值 4.__set 设定成员值 5.__isset 判断成员值 6.__unset unset成员 ...
- 博弈dp 以I Love this Game! POJ - 1678 为例
写在前面的话 知识基础:一些基础的博弈论的方法,动态规划的一些知识 前言:博弈论就是一些关于策略或者游戏之间的最优解,动态规划就是对于一些状态之间转移的一些递推式(or 递归),dp分为很多很多种,比 ...
- requests模块基础
requests模块 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { bor ...
- 販売管理(SD)
SD(販売管理)系のSAP DBテーブル. 随時更新していきます. [得意先マスタ]KNA1: 一般データ KNB1: 会計データ KNBK: 銀行データ KNVV: 販売データ KNVP: 取引先機 ...
- python2.7入门---Number(数字)
今天咱们来简单分享一下关于python中的一种数据类型和操作方法.费话不多说哈,咱们直接来进行实践加理论.首先,我们要知道,Python Number 数据类型用于存储数.数据类型是不允许改变 ...
- VS2017 远程调试小记
VS2017 远程调试小记 支持windows\linux\macos, 直接连接项目点的上线版本代码进行调试.保证bug在同个环境下实时追踪. 注意点 双方的 msvsmon.exe版本需一致,最好 ...