转自:http://www.csframework.com/archive/1/arc-1-20150109-2193.htm

服务端增加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
39 //来源:C/S框架网(www.csframework.com) QQ:1980854898

 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
45 //来源:C/S框架网(www.csframework.com) QQ:1980854898

使用:

1 [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
2 [WCF_ExceptionBehaviour(typeof(WCF_ExceptionHandler))]
3 public class AccountModuleService : IAccountModuleService
4 {
5
6    //来源:C/S框架网(www.csframework.com) QQ:1980854898
7
8
9 }   

转载于:https://www.cnblogs.com/yf2011/p/5198776.html

服务端增加WCF服务全局异常处理机制相关推荐

  1. Nacos 服务端健康检查及客户端服务订阅机制源码分析(三)

    Nacos 服务端健康检查 长连接 概念:长连接,指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发送链路检测包 注册中心客户端 2.0 以后使用 gRPC 代替 h ...

  2. vue服务端渲染 MySQL_vue服务端渲染

    一.基本原理 1.服务端渲染实现原理机制:在服务端拿数据进行解析渲染,直接生成html片段返回给前端.然后前端可以通过解析后端返回的html片段到前端页面,大致有以下两种形式: a.服务器通过模板引擎 ...

  3. SpringCloud(第 003 篇)服务发现服务端EurekaServer微服务

    SpringCloud(第 003 篇)服务发现服务端EurekaServer微服务 - 一.大致介绍 1.众所周知,在现在互联网开发中,访问地址的IP和端口号是动态的,一个服务停掉再重新启用后IP和 ...

  4. JAVA b2b2c多用户商城系统源码-服务发现服务端EurekaServer微服务

    一.大致介绍 1.众所周知,在现在互联网开发中,访问地址的IP和端口号是动态的,一个服务停掉再重新启用后IP和端口就可能发生了改变,所以用硬编码是肯定不行了.于是我们尝试使用新的技术来解决这一难题.需 ...

  5. web服务端和游戏服务端的区别

    最近几天在技术交流群里讨论到游戏服务端的一些技术细节,小说君发现有些做服务端的同学因为没有接触过游戏服务端,所以对游戏服务端产生了一些误解.因此今天的文章就从web服务端和游戏服务端的区别说起,简单介 ...

  6. React 服务端渲染 umi服务端渲染

    react 服务端渲染原理不复杂,其中最核心的内容就是同构. node server 接收客户端请求,得到当前的req url path,然后在已有的路由表内查找到对应的组件,拿到需要请求的数据,将数 ...

  7. bean加载时调用@value时会出现空指针异常_SpringMVC全局异常处理机制

    SpringMVC全局异常处理 SpringMVC除了可以做URL映射和请求拦截外,还可以做全局异常的处理.全局异常处理可能我们平时比较少机会接触,但是每个项目都肯定会做这个处理.比如在上一间公司,是 ...

  8. nuxt服务端php,nuxt服务端部署指南

    nuxt是一款基于vue的服务端渲染框架,语法和vue基本保持一致,不过生命周期与vue不同,部署方式也和vue大相径庭,vue项目部署是spa的静态页面,只需build出来静态页面,但是nuxt是需 ...

  9. java vue 服务端渲染_vue服务端渲染缓存应用详解

    服务端渲染简介 服务端渲染不是一个新的技术:在 Web 最初的时候,页面就是通过服务端渲染来返回的,用 PHP 来说,通常是使用 Smarty 等模板写模板文件,然后 PHP 服务端框架将数据和模板渲 ...

最新文章

  1. 【C】数组数组初始化总结
  2. 用Python玩转微信的正确姿势!
  3. powershell开源新闻及简介
  4. oracle 闪查询,Oracle的回闪查询
  5. Python之configparser模块详解和使用
  6. 什么影响matlab损失值,matlab – 在计算Logistic损失函数的值和梯度时避免数值溢出...
  7. Ajax 超完整教程
  8. 专业的售后服务管理系统
  9. 安卓pdf阅读器_2020年双十一有哪些电纸书、电子书阅读器值得买?Kindle、掌阅、文石、科大讯飞哪个好?...
  10. DB9接口定义、232串口公头和母头的引脚定义接法
  11. 基于STM32的四位TM1637完整程序
  12. 互补滤波算法及理论推导
  13. zTree插件setting配置详解
  14. 2022.02.10
  15. hdu1069 最长下降子列
  16. eclipse中Debug调试基本操作
  17. 通过ajax单独上传图片
  18. CentOS 6.4x64编译安装DRBD及备节点同步后容量变小的处理
  19. 深入理解金融交易报文Iso8583协议
  20. Event Driven Class OSAL 基于事件驱动的模拟操作系统

热门文章

  1. delphi中Record 和Packed Record的区别
  2. (转)WP7 开发学习(2):在WP7中使用网络请求
  3. [股市]跳搂指数(收藏)
  4. 计算机考研在线题库,考研全题库电脑版
  5. html5游戏面试题及答案,HTML5常见面试题及答案(二)
  6. php中is null,php中empty(), is_null(), isset()函数区别
  7. boost::filesystem 库的简单使用
  8. Linux函数之间的goto 跳转
  9. mtk一键usb驱动_6寸三防手持终端 Windows系统 安卓系统,高通 MTK 条码扫描 NFC
  10. 基于Flash的ECC纠错算法基本原理及软件C语言算法和硬件Verilog实现(PPT在主页可下载)