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进行微服务架构设计时,微服务之间调用时异常处理机制应该如何设计的问题.我们知道在进行微服务架构设计时 ...
随机推荐
- sqlachemy详解
实习期老大让我学Python...学了很久了好吗,不过确实对其中的一些原理性的东西还不够深入. 比如今天要说的sqlachemy,结合网上做些总结吧 ORM 全称 Object Relational ...
- 2019年第十届蓝桥杯c++A组java/c++组题解
#include<iostream> #include<vector> using namespace std; vector <int > vec; long l ...
- over开窗函数的用法
over(partition by c1.pmid,d1.type,e1.objid order by e1.objid ) pinum 先根据字段排序,pinum.在取第一条数据and p1.pi ...
- Python栈的学习资料
持续更新... 1. 基础 Python for Everybody的视频课程,称得上深入浅出 https://www.py4e.com/ 2. 进阶 偏重实践应用,快速上手,稀饭~ https:// ...
- pyecharts数据分析及展示
仅仅从网上爬下数据当然是不够用的,主要还得对数据进行分析与展示,大部分人都看重薪资,但是薪资数据有的是*k/月,有的是*万/月,还有*万/年等等,就要对数据进行清理 将所有单位统一化,全部换算成统一单 ...
- python3 练习题100例 (十一)
题目十一:举例证明角谷猜想:以一个正整数N为例,如果N为偶数,就将它变为N/2,如果除后变为奇数,则将它乘3加1(即3N+1).不断重复这样的运算,经过有限步后,一定可以得到1. #!/usr/bin ...
- Leecode刷题之旅-C语言/python-14.最长公共前缀
/* * @lc app=leetcode.cn id=14 lang=c * * [14] 最长公共前缀 * * https://leetcode-cn.com/problems/longest-c ...
- C语言实现二分查找
二分查找优势:比顺序查找更有效率 特点:元素按顺序排列 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include ...
- C# 测量程序运行时间
using System.Diagnostics; Stopwatch watch = new Stopwatch(); watch.Start(); /* 需要测量运行时间的程序 */ watch. ...
- VC中编译出现error LNK2005:xx already defined in xxx.obj问题解决。
网上百度说是在.h头文件中定义了全局变量,然后其他文件包括了该头文件的原因. 解决方法如下: 点击项目配置->linker->General->Force file Output设置 ...