转载: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

}   

最新文章

  1. KMP学习之旅
  2. JSONObject.fromObject(map)(JSON与JAVA数据的转换)
  3. win10下vs2015创建asp,net core项目并运行在ubuntu14.04下
  4. MySql数据库索引原理
  5. storyboard xib下label怎么自适应宽度高度
  6. DateFormat 中间加别的字符
  7. if语句解一元二次方程~
  8. MySQL基本概念
  9. C#实现快速排序法
  10. (ternary operator)三元运算符.
  11. webview的配置
  12. git使用简易指南
  13. P1119 灾后重建(floyd进阶)
  14. TJU ACM-ICPC Online Judge—1191 The Worm Turns
  15. Dynamics 365 解决方案导出报错
  16. 解决npm install过程中报错:unable to verify the first certificate
  17. 安装和强行卸载fuse
  18. Learning-Python【21】:Python常用模块(4)—— re、logging、hashlib、subprocess
  19. python 全栈开发,Day128(创建二维码,扫码,创建玩具的基本属性)
  20. 三、Kubernetes之深入了解Pod

热门文章

  1. netty学习指南
  2. Chrome 本地通信
  3. TDS开启log TDS开启SSL
  4. 【HDU5772】String Problem [网络流]
  5. 「6月雅礼集训 2017 Day1」看无可看
  6. bzoj 2662&amp;bzoj 2763 SPFA变形
  7. jQuery获取表格隐藏域与ajax请求数据结合显示详情
  8. linux shell 脚本实现tcp/upd协议通讯(重定向应用)
  9. Shell 脚本实现TCP/UDP协议通讯
  10. MYSQL数据库的数据完整性