• ESFramework介绍之(9)-- 插件对(Addin Pair)调试“框架”


        使用ESFramework开发C/S(通常为4层、3层也没问题)应用,当需要增加一项新的业务时,我们需要做的仅仅是开发两个插件,一个是服务端的业务功能插件(FunAddin),一个是客户端插件(PassiveAddin),这两个插件合在一起称为Addin Pair。开发这两个插件,只需要关注于业务,而其它与业务无关的比如网络通信、加密、数据安全,都不用管。ESFramework很好的将这些关注点分离开来,使得写“业务”插件的程序员的工作变得非常单纯,在ESFramework介绍之(8)-- 客户端插件IPassiveAddin一文给出的一个开发服务端功能插件和客户端插件的示例中,大家应该已经体会到这点了。

         正如上文结尾处提到,当增加一项新的业务,调试包含了这个新业务实现的插件对(AddinPair)时非常麻烦,因为在ESFramework 4层架构中,服务端功能插件加载于功能服务器(FS)上,客户端插件加载在客户端应用程序上,中间的通信还经过了应用服务器(AS)。这样就要将ASFSClient都启动起来,才能对插件Pair进行调试,并且在这样调试的过程中,很多其它的因素会分散我们的注意力,比如多线程的影响、消息Hook的影响等等,这使得调试Addin Pair并不轻松,正是由于这个原因,促使我开发一个插件调试框架来简化这个麻烦的过程。

         我的想法是,在VS.NET调试模式中运行这个“插件调试框架”(一个winForm应用程序),加载要调试的Addin Pair,然后,启动“业务操作窗体”显示出来,后续的交互将在两个插件之间直接进行通信,而VS.NET提供了我们跟踪到加载的插件的源码中的能力,这样就可以调试Addin Pair了。“插件调试框架”应用程序的主界面如下:

     

        测试模式中的“异常(功能服务器掉线)”用于模拟找不到对应服务端功能插件的情况。 

         我们知道,客户插件(PassiveAddin)通过IServerAgent来发送请求获取回复,在客户端应用程序中,IServerAgent是对底层TcpUdp的封装。在“插件调试框架”我们提供一个IServerAgent的实现给要调试的PassiveAddin使用,ESFramework给出的实现是AddinBridge类,它实现了IServerAgent接口,并且把PassiveAddin提交的请求直接提交给已加载的业务功能插件处理。AddinBridge实现如下:

    AddinBridge



        AddinBridge
    借助了IAddinManagement(插件管理器)来管理已加载的业务功能插件。
        
        有了
    AddinBridge的支持,“插件调试框架”的实现就非常容易了,我将上图主界面中的按钮点击事件源码列在下面:

            private AddinBridge serverAgent = new AddinBridge() ;
            
    private IPassiveAddin passiveAddin = null ;
    按钮事件处理

         你可以在54行代码处添加断点,然后就可以跟入两个插件的源码中调试了。
         需要注意的是,为了VS.NET能顺利的进入插件的源码,在加载插件时,最好直接加载插件工程Debug目录下的插件dll。
     

        感谢关注!

    转到  :ESFramework 可复用的通信框架(序) 

  • 相关阅读:
    【报错】引入jar包import org.apache.commons.codec.digest.DigestUtils 报错,jar不存在
    【spring data jpa】使用jpa的@Query,自己写的语句,报错:org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'status' cannot be found on null
    【java】在分页查询结果中对最后的结果集List进行操作add()或remove()操作,报错:java.lang.UnsupportedOperationException
    【java】java中直接根据Date 获取明天的时间
    【java】处理时间字段 在数据库查询的时候只想要年月日,不想要时分秒 ,java中设置时间类型为年月日,java中设置Date中的时分秒为00.00.000
    【spring data jpa】 spring data jpa 中 时间格式设置between and 查询
    【mybatis】mybatis 中select 查询 select * 查询出来的数据,字段值带不出来 数据不全
    【spring mvc】spring mvc POST方式接收单个字符串参数,不加注解,接收到的值为null,加上@RequestBody,接收到{"uid":"品牌分类大”},加上@RequestParam报错 ---- GET方式接收单个参数的方法
    Centos7安装配置tomcat 9并设置自动启动
    centos7 yum安装配置redis 并设置密码
  • 原文地址:https://www.cnblogs.com/zhuweisky/p/351105.html
Copyright © 2020-2023  润新知