zoukankan      html  css  js  c++  java
  • WCF服务全局统一异常处理机制

    转载: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) ",详情: " 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


    }   
  • 相关阅读:
    Beta 阶段计划
    alpha阶段总结
    冲刺第十天 12.6 THU
    冲刺第九天 12.5 WED
    冲刺第八天 12.4 TUE
    冲刺第七天 12.3 MON
    冲刺第六天 11.30 FRI
    正弦交流电有效值系数sqrt(2)的推导
    关于STM32官方FOC库函数扇区分析中’131072’系数的解释
    闭环系统零、极点位置对时间响应性能指标的影响
  • 原文地址:https://www.cnblogs.com/51net/p/4240451.html
Copyright © 2011-2022 走看看