使用AOP動態調用WebService

作者: faib  來源: 博客園  發布時間: 2009-08-24 10:13  閱讀: 2833 次  推薦: 0   原文鏈接   [收藏]  

    在網上搜了一下“動態調用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
0
0
 
標簽:WebService
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()