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

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

C# Code:

/// <summary> 
/// WCF服务端异常处理器 
/// </summary> 
public class WCF_ExceptionHandler : IErrorHandler
{
   #region IErrorHandler Members
   
   /// <summary> 
   /// HandleError 
   /// </summary> 
   /// <param name="ex">ex</param> 
   /// <returns>true</returns> 
   public bool HandleError(Exception ex)
   {
      return true;
   }
   
   /// <summary> 
   /// ProvideFault 
   /// </summary> 
   /// <param name="ex">ex</param> 
   /// <param name="version">version</param> 
   /// <param name="msg">msg</param> 
   public void ProvideFault(Exception ex, MessageVersion version, ref Message msg)
   {
      // 
      //在这里处理服务端的消息,将消息写入服务端的日志 
      // 
      string err = string.Format("调用WCF接口 '{0}' 出错", ex.TargetSite.Name) ",详情:\r\n" ex.Message;
      var newEx = new FaultException(err);
      
      MessageFault msgFault = newEx.CreateMessageFault();
      msg = Message.CreateMessage(version, msgFault, newEx.Action);
   }
   
   #endregion
}

//来源:C/S框架网(www.csframework.com) QQ:1980854898

C# Code:

/// <summary> 
/// WCF服务类的特性 
/// </summary> 
public class WCF_ExceptionBehaviourAttribute : Attribute, IServiceBehavior
{
   private readonly Type _errorHandlerType;
   
   public WCF_ExceptionBehaviourAttribute(Type errorHandlerType)
   {
      _errorHandlerType = errorHandlerType;
   }
   
   #region IServiceBehavior Members
   
   public void Validate(ServiceDescription description,
   ServiceHostBase serviceHostBase)
   {
   }
   
   public void AddBindingParameters(ServiceDescription description,
   ServiceHostBase serviceHostBase,
   Collection<ServiceEndpoint> endpoints,
   BindingParameterCollection parameters)
   {
   }
   
   public void ApplyDispatchBehavior(ServiceDescription description,
   ServiceHostBase serviceHostBase)
   {
      var handler =
      (IErrorHandler)Activator.CreateInstance(_errorHandlerType);
      
      foreach (ChannelDispatcherBase dispatcherBase in
      serviceHostBase.ChannelDispatchers)
      {
         var channelDispatcher = dispatcherBase as ChannelDispatcher;
         if (channelDispatcher != null)
         channelDispatcher.ErrorHandlers.Add(handler);
      }
   }
   
   #endregion
}

//来源:C/S框架网(www.csframework.com) QQ:1980854898

使用:

C# Code:


[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
[WCF_ExceptionBehaviour(typeof(WCF_ExceptionHandler))]
public class AccountModuleService : IAccountModuleService
{
   
   //来源:C/S框架网(www.csframework.com) QQ:1980854898

}   

WCF服务全局统一异常处理机制的更多相关文章

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

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

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

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

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

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

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

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

  5. MVC 增加统一异常处理机制

    原文地址:http://www.cnblogs.com/leoo2sk/archive/2008/11/05/1326655.html 摘要      本文将对“MVC公告发布系统”的发布公告功能添加 ...

  6. 服务网关zuul之三:zuul统一异常处理

    我们详细介绍了Spring Cloud Zuul中自己实现的一些核心过滤器,以及这些过滤器在请求生命周期中的不同作用.我们会发现在这些核心过滤器中并没有实现error阶段的过滤器.那么这些过滤器可以用 ...

  7. 【WCF--初入江湖】06 WCF契约服务行为和异常处理

    06 WCF契约服务行为和异常处理 一.WCF契约服务行为 [1] 服务行为可以修改和控制WCF服务的运行特性. 在实现了WCF服务契约后,可以修改服务的很多执行特性. 这些行为(或者特性)是通过配置 ...

  8. WCF技术剖析之十:调用WCF服务的客户端应该如何进行异常处理

    原文:WCF技术剖析之十:调用WCF服务的客户端应该如何进行异常处理 在前面一片文章(服务代理不能得到及时关闭会有什么后果?)中,我们谈到及时关闭服务代理(Service Proxy)在一个高并发环境 ...

  9. 【统一异常处理】@ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常

    1.利用springmvc注解对Controller层异常全局处理 对于与数据库相关的 Spring MVC 项目,我们通常会把 事务 配置在 Service层,当数据库操作失败时让 Service ...

随机推荐

  1. js 禁止鼠标和键盘行为

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 知问前端——日历UI(三)

    datepicker日期选择选项 属性 默认值/类型 说明 minDate 无/对象.字符串或数值 日历中可以选择的最小日期 maxDate 无/对象.字符串或数值 日历中可以选择的最大日期 defa ...

  3. JAVA 成员访问权限修饰符

    修饰符         类内部     package内         子类         其他 public             允许         允许                 ...

  4. 【洛谷 P1712】 [NOI2016]区间 (线段树+尺取)

    题目链接 emmm看起来好像无从下手, \(l_i,r_i\)这么大,肯定是要离散化的. 然后我们是选\(m\)个区间,我们先对这些区间按长度排个序也不影响. 排序后,设我们取的\(m\)个区间的编号 ...

  5. 【洛谷 P1653】 猴子 (并查集)

    题目链接 没删除调试输出,原地炸裂,\(80\)->\(0\).如果你要问剩下的\(20\)呢?答:数组开小了. 这题正向删边判连通性是很不好做的,因为我们并不会并查集的逆操作.于是可以考虑把断 ...

  6. UVa 12265 贩卖土地 单调栈

    题意 输入一个\(n\times m\)的矩阵,每个格子可能是空地,也可能是沼泽.对于每个空地格子,求出以它为右下角的空矩形的最大周长,然后统计每个周长出现了多少次. 思路 对于 每一行 每两个沼泽之 ...

  7. POJ1220(大数进制转换)

    NUMBER BASE CONVERSION Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4652   Accepted: ...

  8. jenkins===当postman出现错误403 No valid crumb was included in the request的解决办法

    问题描述:当使用postman获取jenkins的json数据的时候,会返回标题中描述的错误 如下图: 将圈中的框,取消勾选! 再次运行正常! 这时候修改jenkins如下:

  9. Crontab无法自动执行,直接运行脚本却能执行

    Crontab无法自动执行,直接运行脚本却能执行 http://bbs.chinaunix.net/thread-1926428-1-1.html crontab -e crontab内容为* * * ...

  10. 【转】Spring MVC 解读——<mvc:annotation-driven/>

    转载自:http://my.oschina.net/HeliosFly/blog/205343 一.AnnotationDrivenBeanDefinitionParser 通常如果我们希望通过注解的 ...