zoukankan      html  css  js  c++  java
  • 艾伟_转载:使用AOP动态调用WebService 狼人:

        在网上搜了一下“动态调用WebService”相信都能搜出上千篇文章,但是都出自同一个版本:使用ServiceDescriptionImporter导入wsdl然后进行动态编译,再调用相应的Method返回值。这种方法不足之处就是编译的时候可能会有些慢,毕竟是编译整个WebService,而且前台都是使用同一个方法传入调用的方法来进行调用的。再者,如果使用了Model,引用了WebService后的Model并非此Model,而且如果是List的话,那更差之千里了,返回的只能是数组。
        本人经过思考,用AOP的原理实现了WebService的动态调用,实际上,是调用接口类的方法,然后使用反射得到该方法的返回值,参数等,然后再构造一个WebService的代理类,动态编译后调用返回值。接下来将一一介绍。
        首先定义一个WebService如下。其中使用了FaibClass.Data数据框架。

    Code

        客户端也定义一个与之相似的类,暂将它称为接口类,因为它并不实现操作,只是为AOP调用提供方法信息,但是返回值都为null,即不操作。

    Code

        前台调用如下:

    Code

        下面将一一对每个类进行说明。
        一、自定义代理属性 DynamicWebServiceAttribute。 

    Code

        客户端还要为每一个WebService定义一个DynamicWebServiceAttribute的继承类,如

    Code

        就是ATest上的那个特性,该类再在app.config里定义相应的webservice调用参数,后面再介绍。这里的Match你可能发现了,就是webservice里方法名与ATest里的匹配方式。
        二、代理处理类 AspectDynamicWebServiceProxy 核心就在这里了

    Code

        在invoke中,拦截了ATest的调用方法,DyamicCallWebService进行分析并构造WebServicw的代理类代码,这里使用了缓存,第一次调用 方法都要经过编译,以后就不用了。
        三、配置类
    DynamicWebServiceSectionHandler

    Code
    DynamicWebServiceConfiguration
    Code
    DynamicWebServiceDictionary
    Code
    DynamicWebServiceSettings
    Code

        ap.config配置如下

    Code
  • 相关阅读:
    【jQuery】添加删除记录练习
    git
    常用正则表达式
    【资源】前端插件
    menu 菜单显示隐藏-jquery实现
    java作业——Day006
    java作业——Day005
    java作业——Day004
    java作业——Day003
    java作业——Day001
  • 原文地址:https://www.cnblogs.com/waw/p/2157157.html
Copyright © 2011-2022 走看看