智能建筑综合管理平台系统中WCF通信消息拦截方法技术领域
本发明涉及智能建筑综合管理平台,具体涉及基于WCF(Windows Communication
Foundation)通信框架开发的智能建筑综合管理平台客户端和服务端通信的消息拦截统一
处理的实现方法。
背景技术
在智能建筑综合管理平台中,客户端与服务端的通信机制采取的是WCF通信机制,
在智能建筑综合管理平台中的 WCF通信过程中有打印日志和异常处理的需求。
WCF是由微软开发的一系列支持数据通信的应用程序框架。对于WCF的客户端来
说,WCF服务就像是一个Web Service一样,所有WCF的通信链接都是由客户端的服务代理来
完成,客户端开发人员不需要在WCF通信方面花费精力,只需专注客户端的业务开发,对于
开发客户端系统很便利。同时WCF通信也采取了SOAP(Simple Object Access Protocol,
简单对象访问协议),这种简单对象访问协议消息通信机制,使得通信过程很安全。由于WCF
开发的便利性和安全性,当前在智能建筑综合管理平台中采取了WCF的通信机制。
但是,在智能建筑综合管理平台中需要处理日志打印和异常的捕捉处理的地方非
常多,如果编程人员在每一个需要日志打印和异常处理的地方都手动编写代码,无疑将增
加工作量,编写大量重复代码降低开发效率,出错率也会上升。传统的日志打印方法和异常
处理方法无法满足智能建筑综合管理平台快速开发的需求。
发明内容
针对现有技术的问题, 本发明提供了一种智能建筑综合管理平台系统中WCF通信
消息拦截方法。
本发明提供一种智能建筑综合管理平台系统中WCF通信消息拦截方法,当Client
端向Server端发送WCF消息请求后,通过消息拦截处理过程拦截Server端返回的消息响应,
并进行智能建筑综合管理平台系统中日志打印以及异常的捕捉处理,最后将消息返回给
Client端;消息拦截处理过程实现如下,
步骤1,建立接口类IAopOperator,该类提供一个方法Process(IMethodCallMessage _
call),其中参数_call的类型为IMethodCallMessage,IMethodCallMessage为微软提供的
系统类,_call参数为方法调用消息接口信息;
步骤 2,建立抽象类AopProxyBase,所有自定义消息拦截代理类都从此类派生;该类继
承步骤1中IAopOperator接口类和微软系统提供的RealProxy类,实现步骤1中的接口类
IAopOperator中的Process方法, Process方法用来返回拦截的WCF消息所执行的方法结
构;
步骤3,建立接口类IAopProxyFactory,用于创建特定的消息拦截代理的实例,
IIAopProxyFactory类提供一个方法CreateAopProxyInstance,该方法用来返回步骤2中定
义的抽象类AopProxyBase;
步骤4,建立类AopProxyAttribute,该类继承微软提供的系统类ProxyAttribute;
步骤5,建立类AopWcfProxy,该类继承自步骤2中的AopProxyBase类;该类覆写了
AopProxyBase中的Process方法,实现对WCF通信过程中消息拦截的处理,在智能建筑综合
管理平台中实现通用的日志打印和异常的捕捉处理;
步骤6,建立工厂类AopWcfProxyFactory,该类继承步骤3中的接口类
IAopProxyFactory,实现接口的方法CreateAopProxyInstance,返回步骤5中的
AopWcfProxy对象;
步骤7,在所有需要进行消息拦截的类前面加上[AopProxyAttribute(typeof
(AopWcfProxyFactory))]标签,用于实现消息拦截功能;
其中,AopProxyAttribute为步骤4中定义的拦截属性类,typeof 为关键词,
AopWcfProxyFactory为步骤6中定义的工厂类,用来创造步骤5中的AopWcfProxy对象的工
厂类。
而且,步骤4中,AopProxyAttribute重写了ProxyAttribute类中的
CreateInstance方法,用来获得被拦截对象的执行类。
在智能建筑综合管理平台中的 WCF通信过程中有对消息拦截进行打印日志和异
常的捕捉处理的需求,本发明正是利用AOP编程的方式实现了对WCF通信消息的拦截实现日
志打印、异常的捕捉处理的功能。在智能建筑综合管理平台中任何需要日志打印和异常的
捕捉处理的地方按照约定的规则编码的时候给函数加上属性,就能实现异常的捕捉和处理
以及日志的的打印,解决了重复编写代码的问题和提高了开发效率,降低了资源成本。进一
步地,本发明中实现的对WCF消息进行拦截并进行日志打印和异常处理的功能可以应用的
场景不限于智能建筑,任何需要实现消息拦截的功能都可以达到要求,应用广泛,商业价值
高。
附图说明
图1为本发明实施例中系统拓扑连接图。
图2为本发明实施例中WCF通信的消息拦截的流程图。
具体实施方式
以下结合附图和实施例具体说明本发明的技术方案。
本发明的实施例基于WCF的分布式集群环境,基本运行环境的拓扑图如图1所示,
使用分布式架构,智能建筑综合管理平台系统中Server(服务器)端和DataBase(数据库)端
只有一个实例,Client(客户端)可以有多个实例。
在进行具体实施之前,需要对DataBase端基础数据环境配置,进行数据表的初始
化。Client端和Server端用WCF的机制进行通信。
AOP(Aspect Oriented Programming)是面向切面编程,通过预编译方式和运行期
动态代理实现程序功能的统一维护的一种技术,在不修改源代码的情况下给程序动态添加
功能。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合
度降低,提高程序的可重用性,同时提高了开发效率。AOP的主要功能是日志记录,性能统
计,安全控制,事物处理,异常的捕捉处理等。
利用AOP方式实现Client端对Server端的WCF通信的消息进行拦截,进行日志打印
和异常的捕捉处理的实现方法包括如下步骤:
步骤1:建立接口类IAopOperator。该类提供一个方法Process(IMethodCallMessage _
call) 。其中参数_call的类型为IMethodCallMessage,IMethodCallMessage为微软提供的
系统类,_call参数为方法调用消息接口信息。方法Process的实现和使用参见下一步骤。
步骤 2:建立抽象类AopProxyBase,所有自定义消息拦截代理类都从此类派生。该
类继承步骤1中IAopOperator接口类和微软系统提供的RealProxy类。实现步骤1中的接口
类IAopOperator中的Process方法。该Process方法主要用来返回拦截的WCF消息所执行的
方法结构。RealProxy类的Invoke方法为微软系统提供的现有技术,可重写RealProxy类的
Invoke方法来调用Process方法。这样在所有继承AopProxyBase的类中只要覆写Process方
法,就可以加入特殊的处理,比如日志打印或者异常的捕捉处理等。但是开发人员不能在每
一个需要实现日志打印和异常的捕捉处理的地方都去重写Process方法。需要实现一个通
用的方法以达到目的,减少代码的编写量。接下来的步骤就是来实现这个通用的方法。
步骤3:建立接口类IAopProxyFactory,用于创建特定的消息拦截代理的实例,
IAopProxyFactory的作用是使消息拦截独立于具体的消息拦截代理类。IAopProxyFactory
类提供一个方法CreateAopProxyInstance,该方法返回步骤2中定义的抽象类
AopProxyBase。
步骤4:建立类AopProxyAttribute。该类继承微软提供的系统类ProxyAttribute。
如果一个类想实现具体的消息拦截,只要实现步骤2中的抽象类AopProxyBase和步骤3中的
IAopProxyFactory类,然后加上AopProxyAttribute特性即可。AopProxyAttribute重写了
ProxyAttribute类中的CreateInstance方法,用来获得被拦截对象的执行类。
ProxyAttribute类中的CreateInstance方法为微软系统提供的现有技术,本发明不予赘
述。
步骤5:建立类AopWcfProxy,该类继承自步骤2中的AopProxyBase类。该类覆写了
AopProxyBase中的Process方法。实现对WCF通信过程中消息拦截的处理,在智能建筑综合
管理平台中实现的是通用的日志打印和异常的捕捉处理。
步骤6:建立工厂类AopWcfProxyFactory,该类继承步骤3中的接口类
IAopProxyFactory。实现接口的方法CreateAopProxyInstance,返回步骤5中的
AopWcfProxy对象。
步骤7:在所有需要进行消息拦截的类前面加上[AopProxyAttribute(typeof
(AopWcfProxyFactory))]标签即可实现消息拦截功能。其中AopProxyAttribute为步骤4中
定义的拦截属性类,typeof 为关键词, AopWcfProxyFactory为步骤6中定义的工厂类,用
来创造步骤5中的AopWcfProxy对象的工厂类。消息拦截功能实现了捕获了WCF通信过程中
所有的异常和日志记录,并进行个性化处理后返回给Client。
利用上述方案来实现Client端的日志打印以及异常的捕捉处理的流程参见图2。
在Client端向Server端发送WCF消息请求后,本发明中实现的消息拦截处理过程会拦截
Server端返回的消息响应,并进行日志打印以及异常的捕捉处理,最后将消息返回给
Client端。具体实施时,本发明技术方案可由本领域技术人员采用软件技术实现,在需要实
现日志打印以及异常的捕捉处理的地方只要加上约定的代码就可以轻易实现,实现自动日
志打印以及异常的捕捉处理,达到了代码的复用目的,减少了代码的编写量,降低出错率。
上述实施例流程描述仅为了清楚说明本发明的基本方法和装置,但本发明并不仅
限于上述实施例;凡是依据本发明的技术实质上实施例所作的任何简单修改、等同变化与
修饰,均落入本发明的技术方案的保护范围之内。