?

基于.NET Web Service的動態接口設計與實現 

2016-11-07 21:21丁易難
軟件導刊 2016年9期

摘要:由于智能手機的普及和社會信息化的不斷發展,人們希望能通過手機或者平板的APP對原有B/S架構的信息化系統進行操作,因此這些系統就需要為移動端的APP提供訪問系統內部業務邏輯的接口,而如何為APP快速高效地提供這些接口一直是個難題。如果服務器只向外界暴露一個接口,而外部應用只需通過調用該接口就可以完成服務器中所有的業務邏輯,則會大大降低接口的開發時間和成本。該類接口被稱為“動態接口”,設計并實現了基于Web Service的動態接口,以提高接口開發效率。

關鍵詞:APP;Web Service;動態接口

DOIDOI:10.11907/rjdk.161484

中圖分類號:TP319

文獻標識碼:A文章編號文

章編號:16727800(2016)009008203

基金項目基金項目:

作者簡介作者簡介:丁易難(1991-),男,安徽安慶人,西安工程大學計算機科學學院碩士研究生,研究方向為計算機應用開發。

0引言

目前,大部分企業都搭建有自己的信息化平臺,B/S架構的跨平臺性和易用性,使得B/S架構被廣泛應用。然而,隨著移動網絡技術及移動設備性能的快速發展,“移動辦公”越來越受到企業青睞。很多企業都紛紛希望能擁有一個手機APP版的企業信息化平臺,該平臺向外界提供一個訪問系統內部的BLL層(Business Logic Layer)的接口,以便其它形式的用戶終端調用。在.NET平臺下,一般都是采用微軟提供的Web Service技術,向外界暴露接口。一般情況下,系統開發者會在Web Service層里,將系統中BLL層的每個類中的每個方法寫一個同樣的Web Method為外界終端提供訪問內部BLL層的接口。但是,一個系統的業務邏輯眾多,會有大量的業務邏輯的對象和方法。使用上述方法,會導致開發人員的工作量巨大。如果能在Web Service里,只寫一個Web Method,即在本系統的Web Service層中只向外界提供一個接口,通過外部終端向服務器調用此接口,并傳遞相關參數,進而“動態地”調用系統內部已實現的各種業務邏輯方法,就會節省開發人員為系統開發接口而耗費的大量的工作時間。鑒于此,本文主要闡述了如何在基于.NET平臺的Web Service技術下,完成上述“動態接口”設計與實現。

1相關技術

1.1Web Service

Web Service是一種跨編程語言和跨操作系統平臺的遠程調用技術[1]。Web Service技術能使得運行在不同機器上的不同應用無須借助附加的、專門的第三方軟件或硬件, 就可相互交換數據或集成。依據Web Service規范的實施應用, 無論它們所使用的語言、 平臺或內部協議是什么, 都可以相互交換數據[2]。Service是自描述、 自包含的可用網絡模塊, 可以執行具體的業務功能。Web Service也很容易部署, 因為它們基于一些常規的產業標準以及已有的一些技術,諸如標準通用標記語言下的子集XML、HTTP。Web Service減少了應用接口的花費,為整個企業甚至多個組織之間業務流程的集成提供了一個通用機制。

1.2JSON

JSON是一個輕量級的數據交換負載格式[3]。它是基于JavaScript編程語言ECMA-262 3rd Edition-December 1999標準的一種輕量級數據交換格式,主要用于跟服務器進行數據交換。與XML相比,JSON更加簡單和靈活[4]。JSON還具有可讀性、可擴展性和編碼解碼難度低等特點。因此,本文設計的基于Web Service的動態接口所傳遞的參數中,或者返回的結果中若有系統的對象實體Model,則需要將其轉成JSON格式的字符串,以方便客戶端和服務端解析。

1.3.NET反射技術

反射是C#.Net中獲取運行時類型信息的方式[5],它也是.NET中的重要機制,提供了封裝程序集、模塊和類型的對象(Type類型)??梢允褂梅瓷鋭討B創建類型的實例,將類型綁定到現有對象,或從現有對象獲取類型并調用其方法或訪問其字段和屬性。

2基于Web Service的動態接口實現原理

如圖1所示,“動態接口”的基本實現原理是,客戶端在調用Web Service提供的接口時,客戶端的代理類會把調用的相關數據封裝成SOAP協議(簡單對象訪問協議)的XML格式,通過HTTP協議向服務器端傳遞相關參數(例如調用業務邏輯層的名稱、方法以及方法參數),服務器端接收到這些參數并解析后,通過使用反射技術,動態地創建要調用業務邏輯的方法所在類的實例,再通過該類的實例調用其方法,最后通過網絡將方法的執行結果返回給調用方,從而實現后臺業務邏輯的“動態”調用。

3動態接口具體實現

(1)創建Web Service。首先在Visual Stdio中新建一個Web項目,然后新建一個Web Service類(后綴名為.asmx),取名為DyInterface.asmx。

(2)定義WebMethod。實現“動態接口”需要用到.NET的反射機制,而在使用反射技術時,程序需要知道反射調用的是哪個類的哪一個方法,并且調用的方法可能需要傳遞參數,因此需要在Web Service類中定義這個動態接口的WebMethod時需要定義3個形參:bllName(業務邏輯的類名稱)、methodName(要動態調用的業務邏輯類中的方法名稱)、param(方法的參數)。具體定義動態接口方法的C#代碼如下:

[WebMethod]

public string InVoke(string bllName,string methodName,string param)

{

//ToDo...

}

(3)創建外部客戶端需要調用的業務邏輯類的實例。要調用類中的方法,就要獲得這個類的實例。傳統實例的方法一般是通過關鍵字new來獲得,然而通過new獲得類的實例需在程序中事先寫好,但是動態接口并不會提前知道客戶端需要調用的是哪個業務邏輯類,所以通過傳統new的方式獲得類實例不能滿足本次接口設計需求。因此只有通過形參bllName的值才能知道需要調用是哪一個業務邏輯的類,再利用反射技術,載入業務邏輯層的程序集(BLL),再通過CreateInstance的方法,動態地生成該業務邏輯類的實例。代碼如下:

dynamic bll = Assembly.Load("BLL").CreateInstance("BLL" + bllName)

這里利用了C#的動態類型的關鍵字“dynamic”,來接受創建的業務層的實例。該動態類型是在程序運行期間,動態獲取示實例的具體類型,從而避免了類型強制轉換的步驟。

(4)解析所調用方法中的具體參數。由于是基于Web Service的動態接口設計,且面向的是不同平臺的客戶端,因此為了屏蔽不同平臺差異性,本次動態接口的param參數定義為string類型。由于本次設計的動態接口只提供了一個調用方法參數的形參(param),這樣,當調用業務邏輯層的方法時,需要傳遞的參數有多個,或者傳遞的是系統中的對象實體(Model)時,就需要預先約定好參數傳遞的格式,以便在Web Service中解析它們。因此,參數(param)格式可以這樣約定:如果要調用的業務邏輯方法有N個參數,則依次按原方法參數的順序參數排放好,并以“*”隔開;如果有些參數是系統中的對象實體,則將其轉成JSON形式的字符串,并在JSON串前面加一個"@"符號,以區分普通參數與實體對象參數。若要調用的方法沒有參數,則傳空值。依照上述約定,就可以解析這些參數了,具體代碼如下:

List list = new List();

if (!string.IsNullOrEmpty(param)){//判斷參數是否為空

string[] pars = param.Split(*);//將參數分開

foreach (string s in pars){//遍歷參數

if (s.StartsWith("@")){查詢是否有Json格式的model字符串

switch (bllName){ //如果發現有json串,則把json串轉成相對應的mode case"業務邏輯類1":

//把處理好的參數加入到list集合中

list.Add(JSONHelper.GetModelFromJSON<業務邏輯類名1.Model>(s.Remove(0, 1)));

case"業務邏輯類2":

//把處理好的參數加入到list集合中

list.Add(JSONHelper.GetModelFromJSON<業務邏輯類名2.Model>(s.Remove(0, 1))); break;

//....Todo(根據系統中具體業務邏輯類的數量自行調整)

default:

list.Add(JSONHelper.GetModelFromJSON(s.Remove(0, 1)));

break;

}

}

else{

list.Add(s);//把處理好的參數加入到list集合中,以便后面調用方法的時候用

}

}

}

這里需要說明的是,程序中在JSON轉成實體類中需要傳入實體類的泛型,由于泛型不確定,需要在程序中使用switch語句通過判斷參數BllName來確定泛型,根據系統業務的具體情況,可添加多個case關鍵字來判斷。上述代碼case后面的業務邏輯類和JSON轉Model的泛型可以根據不同的系統替換成不同業務邏輯層的名稱及其對應的實體類型的泛型。

(5)調用客戶端需要調用的業務邏輯方法。利用反射技術,將經過處理后的參數集合list轉成Array型,再傳入業務邏輯對象實例(bll)中,進而通過methodName的值,動態地反射調用外部客戶端想要調用的業務邏輯方法,最后將執行結果以json串的形式返回給系統外部客戶端。具體代碼如下:

Return JSONHelper.ReturnStringToJSON(bll.GetType().GetMethod(methodName).Invoke(bll, list.ToArray()).ToString(), true, 200)

將上述代碼放入第二步所定義的WebMethod的方法體中,最終將該Web Service發布到服務器上,供系統外部終端調用。由第一步命名可知,本次接口的地址為:http://(服務器地址)/DyInterface.asmx。由于各種移動平臺都實現了對Web Service進行訪問的功能,因而只要客戶端拿到該接口的地址,即可按照文中描述的規則對該動態接口進行遠程調用。

由以上實現過程可以看到,在本次創建的Web Service中只有一個WebMethod方法,而外部終端只需通過對該WebMethod進行遠程調用,然后傳遞不同的業務邏輯層的類名稱(bllName)和類中的方法名稱(methodName)以及約定好的格式參數(param),即可完成系統中各種不同的業務邏輯,從而完成本文預期的動態接口設計。

4結語

隨著智能手機與網絡通信技術的普及,以及社會信息化建設進程的加快,越來越多的已經搭建完成的信息化系統,需要從單一的Web端擴展到各式各樣的移動設備APP端,以便用戶方便快捷地使用信息化系統的功能。因此,服務器基于Web Service技術向移動設備APP端提供的信息化系統業務接口,這項需求將會越來越多。例如,在已投入使用的西安市畢業生就業服務綜合管理系統已經利用此項技術,向正在研發該系統對應的學生模塊APP的研發方,提供了這種動態接口?;赪eb Service的動態接口設計,系統研發方不再需要對每個業務邏輯提供單獨的業務接口,節省了大量時間,極大提高了接口的開發效率。因此,本文設計的基于.NET Web Service技術的動態接口具有較高應用價值。

參考文獻:

[1]魏小林,張鐵軍,曹晶,等.利用Web Service技術構建醫院信息系統接口[J].中國數字醫學,2014,9(6):2729.

[2]王向方,武偉,唐偉媛.WebService技術在企業中的應用[J].電腦編程技巧與維護,2015(2):9194.

[3]屈展,李嬋.JSON在Ajax數據交換中的應用研究[J].西安石油大學學報:自然科學版,2011,26(1):9598.

[4]谷方舟,沈波.JSON數據交換格式在異構系統集成中的應用研究[J].鐵路計算機應用,2012,21(2):14.

[5]郭慶華,朱戰立.利用C#.Net反射技術實現軟件界面動態存儲[J].電腦知識與技術,2010(3):634635.

責任編輯(責任編輯:孫娟)

軟件開發與應用
BP神經網絡在軟件質量評價中的應用研究 
基于句子多種特征的相似度計算模型
基于結構方程模型改進ARMA模型參數估計
基于改進遺傳算法的軟件測試用例自動生成
一種改進的風光互補發電系統MPPT控制方法
發動機內部EGR建模與仿真分析
無線傳感器網絡定位技術可靠性分析
應用于公司輿情分析的改進概念圖算法 
算法與語言
基于興趣預測和熱點分析的聯合推薦算法研究 
基于分塊DWT和SVD的魯棒性數字水印算法
基于噴泉碼的機會多播調度算法研究
基于矩陣分解的興趣點推薦算法研究
一種改進的基于位置的推薦算法
八數碼問題解法效率比較及改進研究 
一種改進粒子群算法的測試數據自動生成方法
多數據庫中的間接關聯規則挖掘算法
基于Spark平臺的熱點話題發現算法并行化研究
LSort字符排序算法研究
軟件設計與開發
基于增強現實技術的導航系統研究
風三地面應用系統運維輔助系統設計 
基于VMWARE的市縣地震通云平臺設計與實現
基于Android—x86的windows恢復系統研究與設計
基于GPS和iBeacon的智能校園信息發布平臺設計與實現
Android手機主題設計 
基于ASP.NET的就業見習管理信息系統設計與實現
基于Android的一鍵智能報警系統設計與實現 
基于.NET Web Service的動態接口設計與實現 
基于社交可視化的高校民族預科學生管理評價系統研究
基于設計模板的鍋筒參數化設計系統開發
基于工作流的水運應急信息管理平臺設計 
基于無線安全的智能鎖具及其軟件控制系統 
基于物聯網ZigBee技術的智能家居監控系統 
基于WebGIS的“多規合一”輔助決策支持系統設計與實現
基于ASP.NET標準的采購管理系統研究
基于Android的青少年監護系統設計與實現 
基于Android的招生報名系統設計與實現 
一種基于CRM理念的雙向推薦就業平臺設計
計算機輔助教學網站設計與實現
基于云服務的加密式門禁系統設計
鋁材B2B電子商務系統設計與實現 
基于物聯網的無線測溫模塊設計
應用技術與研究
CMMI在智慧校園人事系統開發中的應用 
水下機器人深度控制研究
基于UWB的自主跟隨機器人定位方法 
軟件項目管理中工期問題研究 
大數據時代網絡信息資源開發利用策略研究
國外開放獲取平臺對我國科技期刊OA發展的啟示
基于MapReduce的城市道路旅行時間短時預測 
數據庫與信息處理
數據中心服務器運行狀態監控系統研究 
語音情感識別綜述
基于離散型Hopfield神經網絡的聯想記憶能力研究 
學生成績管理系統數據查詢優化方法研究 
信息安全
石化工控信息網絡安全區域識別與防護
基于Hermite插值的多密鑰共享協議 
基于色域差分與伽馬校正的交通燈識別 
圖像學與輔助設計
一種基于引導濾波和MNF的高光譜遙感圖像分類方法
深度學習算法應用于巖石圖像處理的可行性研究
一種基于局部直方圖匹配的深度編碼濾波算法
水下大壩裂縫圖像分割方法研究 
計算機與網絡教學
基于信息安全等級保護的信息安全綜合實訓教學研究
國際化高校聯盟體系下結構化MOOC框架 
智能手機在大學生移動學習中的應用研究
高校計算機軟件專業資格考試輔導教學探討 
基于工程教育認證的《軟件工程》課程教學質量建設研究 
數據庫課程微課設計及應用
《Oracle數據庫》課程教學模式探究 
Node.js與Express技術在計算機課程教學中的應用 
基于網絡資源的《物聯網工程導論》課程教學改革
混合學習模式及其實施要點 
Scratch教學研究綜述 
《算法設計與分析》課程翻轉課堂教學模式探究 
公司地址: 北京市西城區德外大街83號德勝國際中心B-11

客服熱線:400-656-5456??客服專線:010-56265043??電子郵箱:longyuankf@126.com

電信與信息服務業務經營許可證:京icp證060024號

Dragonsource.com Inc. All Rights Reserved

icp

91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合