服务端增加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
 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

使用:

1 [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
2 [WCF_ExceptionBehaviour(typeof(WCF_ExceptionHandler))]
3 public class AccountModuleService : IAccountModuleService
4 {
5
6
7 }

最新文章

  1. 设计 api, url 的原则
  2. android studio增量更新
  3. Dynamics AX 2012 R2 配置报表服务器
  4. VC与JavaScript交互(一) --- 如何实现
  5. Eclipse下使用Fat Jar插件对源代码进行打包
  6. laravel框架——表单验证
  7. vs2012 设计器 视图异常
  8. jquery获取和失去焦点改变样式
  9. mysql 行锁排查
  10. C++ count_if/erase/remove_if 用法详解
  11. 掀起Azure AD的盖头来&mdash;&mdash;深入理解Microsoft Graph应用程序和服务权限声明
  12. js网页返回顶部和楼层跳跃的实现原理
  13. ActiveMQ依赖JDK版本关系
  14. open函数新建文件报错
  15. 聊聊Java反射
  16. JS全局对象的属性
  17. tensorflow学习5----GAN模型初探
  18. Unity游戏开发常用的一些函数用法
  19. H5——video百花齐放(浏览器自带的播放器)
  20. VS2010已停止工作,framework 4.0安装失败

热门文章

  1. js面向对象轮播图写法
  2. php第一节(入门语法、数据类型)
  3. 转载:EJB到底是什么
  4. (第03节)三种ApplcationContext的实现
  5. JAVA日期类图解
  6. ELK 分布式日志实战
  7. latex02-LaTeX源文件的基本结构
  8. Kubernetes-tutorials(五)
  9. MVC4+EF 列表数据不能绑定
  10. 总结Verilog中always语句的使用