服务端增加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服务全局异常处理机制的更多相关文章

  1. 服务端增加WCF服务全局异常处理机制

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

  2. WCF服务全局统一异常处理机制

    转载:http://www.csframework.com/archive/1/arc-1-20150109-2193.htm 服务端增加WCF服务全局异常处理机制,任一WCF服务或接口方式出现异常, ...

  3. ASP.NET Core 中间件的使用(三):全局异常处理机制

    前言 我们经常听到"秒修复秒上线",觉得很厉害的样子. 其实不然,这只是一个调侃而已,出现问题的方式很多(逻辑漏洞.代码异常.操作方式不正确等). 我们今天来说代码异常问题怎么快速 ...

  4. Spring Boot 2.x 系列教程:WebFlux REST API 全局异常处理 Error Handling

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 本文内容 为什么要全局异常处理? WebFlux REST 全 ...

  5. Spring Boot 2 Webflux的全局异常处理

    https://www.jianshu.com/p/6f631f3e00b9 本文首先将会回顾Spring 5之前的SpringMVC异常处理机制,然后主要讲解Spring Boot 2 Webflu ...

  6. SpringMVC 全局异常处理

    在 JavaEE 项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合度 ...

  7. Spring Cloud微服务如何设计异常处理机制?

    导读 今天和大家聊一下在采用Spring Cloud进行微服务架构设计时,微服务之间调用时异常处理机制应该如何设计的问题.我们知道在进行微服务架构设计时,一个微服务一般来说不可避免地会同时面向内部和外 ...

  8. WCF全局异常处理

    在用wcf做为单纯的服务端的时候,发生错误是常有的事情,特别是在调用其他系统提供的接口的时候,发生的一些错误总是让人摸不着头脑,严重影响了错误的定位.做.net web开发的时候,我们可以在Globa ...

  9. 花了三天整理,Spring Cloud微服务如何设计异常处理机制?还看不懂算我输

    前言 首先说一下为什么发这篇文章,是这样的.之前和粉丝聊天的时候有聊到在采用Spring Cloud进行微服务架构设计时,微服务之间调用时异常处理机制应该如何设计的问题.我们知道在进行微服务架构设计时 ...

随机推荐

  1. noip2018 洛谷 P1969积木大赛

    1 //一定不要忘记这句话 “连续区间 ”!! #include<bits/stdc++.h> using namespace std; int main(){ int n, h;//n是 ...

  2. 构建高可靠hadoop集群之4-权限指引

    此文翻译自http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-hdfs/HdfsPermissionsGuide.html ...

  3. 使用Python对Csv文件操作

    csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格: 就可以存储为csv文件,文件内容是: No.,Name,Age,Score 1,mayi, ...

  4. php 删除富文本编辑器保存内容中的其他代码(保留中文)

    $str = '<p><p style="ve:&quot;">测试筛选文本域内的中文 </p><p sty;"> ...

  5. PHP令人困惑的strtotime

    经常会有人被strtotime结合-1 month, +1 month, next month的时候搞得很困惑, 然后就会觉得这个函数有点不那么靠谱, 动不动就出问题. 用的时候就会很慌… 比如:今天 ...

  6. Python实现多属性排序

    Python实现多属性排序 多属性排序:假如某对象有n个属性,那么先按某规则对属性a进行排序,在属性a相等的情况下再按某规则对属性b进行排序,以此类推. 现有对象Student: class Stud ...

  7. Go web表单

    package main import ( "fmt" "html/template" "log" "net/http" ...

  8. Git更改远程仓库地址

    最近在开发一个公司内部的公共组件库.老大整理了git仓库里的一些项目,其中就包括这个项目. 项目git地址变了,于是我本地的代码提交成功后push失败. 查看远程地址 git remote -v 更改 ...

  9. Hibernate-ORM:09.Hibernate中的getCurrentSession()

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客将讲述,以优雅的方式创建session对象,我将会说明优点,并提炼成工具类 优点: 1.无需手动关闭s ...

  10. Hibernate-ORM:06.Hibernate中三种状态

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客主要叙述Hibernate中的三种状态:临时状态(瞬时状态),持久状态,游离状态 commit和flu ...