转载: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. java简单发送邮件

    需要的jar 据说是: <dependency> <groupId>javax.mail</groupId> <artifactId>mail</ ...

  2. The 2017 ACM-ICPC Asia East Continent League Final记录

    首先感谢tyz学弟的麻麻-给我们弄到了名额- 然后就开始了ACM ECLFinal的玩耍,A*仙人掌可是立了flag要好好打的- 试机赛好像就全是GCJ kickstart的原题,然后AK了但是由于一 ...

  3. jsp和servlet之间传数据

    一.jsp与java文件传递数据可以使用Servlet类来传递,jsp将数据存入到request对象中,Servlet类获取这个request对象,并将数据取出. 示例代码如下: JSP代码: < ...

  4. unity下的Line of Sight(LOS)的绘制

    先说说什么是Linf of Sight.在很多RTS游戏中,单位与单位之间的视野关系经常会受到障碍物遮挡.Line of Sight指的就是两个物体之间是否没有障碍物遮挡. 比如在dota中,玩家的视 ...

  5. 使用maven构建第一个web项目

    在eclipse中,正常创建maven项目后,发现在index.jsp中会报错,此时在pom.xml中加入如下依赖关系即可 <dependency> <groupId>java ...

  6. Spring -- 注解事务 以及 7个传播行为

    注解事务: 1.开启注解事务配置: <!-- 事务管理器 --> <bean id="transactionManager" class="org.sp ...

  7. 《Java编程思想》笔记 第十九章 枚举类型

    1.基本enum特征 所有创建的枚举类都继承自抽象类 java.lang.Enum; 一个枚举类,所有实例都要在第一句写出以 ,隔开. 如果只有实例最后可以不加 : 枚举类因为继承了Enum,所以再不 ...

  8. c语言,warning: return type of 'main' is not `int'怎么解决?

    ////警告可以忽略,但如果严格点的话 #include<stdio.h> #include<math.h>   int main(int argc, char *arg[]) ...

  9. Python 进阶 之 yield

    .转载自:https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/ Python yield 使用浅析: 您可能听说过, ...

  10. Bootstrap模态框垂直居中展示的方法

    在bootstrap.js中加入以下代码: