喻紅蘭
摘要:隨著互聯(lián)網(wǎng)的發(fā)展,各種應(yīng)用系統(tǒng)之間的信息共享訴求越來越強(qiáng)烈?;赪ebService進(jìn)行數(shù)據(jù)查詢程序的開發(fā),可以滿足不同程序間的信息共享需求。在校園信息系統(tǒng)的開發(fā)中也不例外。文章以一個學(xué)生信息查詢接口的設(shè)計為切入點(diǎn),詳細(xì)介紹了如何基于C#語言,利用WebService開發(fā)出基于Web的API接口,以作為各個系統(tǒng)間共享數(shù)據(jù)的來源,為“互聯(lián)網(wǎng)+”時代下的程序開發(fā)工作提供了重要參考。WebService接口的實現(xiàn),為信息系統(tǒng)的數(shù)據(jù)共享提供了可能,有效保證了單位內(nèi)部信息傳達(dá)的實時性和一致性。
關(guān)鍵詞: WebService;通信;信息共享;C#;校園信息
中圖分類號:TP391 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2018)20-0243-03
1 WebService概述及應(yīng)用場合
1.1 WebService簡介
在互聯(lián)網(wǎng)環(huán)境下,應(yīng)用程序往往需要從Internet或者Intranet上接收其他應(yīng)用傳遞過來的請求并進(jìn)行處理。WebService就是這么一種處理的技術(shù),它全稱XML Web Service,是一種輕量級的信息處理技術(shù)。它使用SOAP在Web上提供的軟件服務(wù),以WSDL文件作為說明文檔,并通過UDDI進(jìn)行注冊。
WebService以 HTTP 協(xié)議為基礎(chǔ),通過 XML 進(jìn)行客戶端與服務(wù)器端的通信,其通信架構(gòu)如圖1所示。
圖1 通信架構(gòu)圖
WebService其實是在實現(xiàn)應(yīng)用程序間的通信?,F(xiàn)時主流的程序通信方法有兩種,通過RPC(遠(yuǎn)程過程調(diào)用)和消息傳遞。使用RPC協(xié)議,客戶端對服務(wù)器上的遠(yuǎn)程過程進(jìn)行調(diào)用,完成一個遠(yuǎn)程對象的實例化并調(diào)用其方法和屬性。RPC力求達(dá)到一種透明性,就是服務(wù)器顯露出遠(yuǎn)程對象的接口,而客戶端就如同在本地使用這些對象的接口一樣。這樣一來,底層的信息就被隱藏了,客戶端不需要知道服務(wù)器端對象是在哪臺機(jī)器上。
1.2 WebService的基礎(chǔ)工具及協(xié)議
WebService平臺需要一套工具及協(xié)議來幫助分布式應(yīng)用程序的創(chuàng)建。要實現(xiàn)不同平臺間數(shù)據(jù)的互通,WebService必須使用一套標(biāo)準(zhǔn)的協(xié)議進(jìn)行數(shù)據(jù)處理。這些工具及協(xié)議有:
XML(Extensible Markup Language):可擴(kuò)展標(biāo)記語言,是一種獨(dú)立于各種程序和平臺的結(jié)構(gòu)化數(shù)據(jù)描述方式,是SOAP的基礎(chǔ)。
SOAP(Simple Object Access Protocol):簡單對象存取協(xié)議。SOAP是WebService的基礎(chǔ)。當(dāng)用戶通過UDDI找到源系統(tǒng)的WSDL描述文檔后,便可以通過SOAP調(diào)用源系統(tǒng)建立的Web服務(wù)中的一個或多個操作。SOAP以XML文檔形式規(guī)范地描述調(diào)用方法,它可以支持如HTTP(S)或者SMTP等多種底層接口。
WSDL(Web Services Description Language):使用XML語法規(guī)則寫成的WSDL文件,用于說明一組SOAP協(xié)議產(chǎn)生的消息以及交換這些消息的方法。大多數(shù)下應(yīng)用軟件能自動生成和使用WSDL。
UDDI (Universal Description,Discovery and Integration) :針對Web服務(wù)供應(yīng)商和使用者所使用的項目。UDDI是一種根據(jù)描述文檔來引導(dǎo)系統(tǒng)查找相應(yīng)服務(wù)的機(jī)制。UDDI利用SOAP消息機(jī)制來發(fā)布、編輯、瀏覽以及查找注冊信息。UDDI使用XML來封裝不同類型的數(shù)據(jù),并發(fā)送到注冊中心或者接收注冊中心返回需要的數(shù)據(jù)。
1.3 使用WebService的優(yōu)點(diǎn)
1) WebService實現(xiàn)了跨平臺,彌補(bǔ)了各種平臺不兼容的缺陷。WebService采用HTTP協(xié)議工作,而每一臺訪問Web的主機(jī),都使用HTTP協(xié)議來通信,另外,大部分防火墻也接收HTTP協(xié)議的請求。使用WebService,可以方便、安全地實現(xiàn)通信。
2)WebService實現(xiàn)了跨語言,使各種語言開發(fā)的應(yīng)用能互相共享數(shù)據(jù)。基本上每一種編程語言都支持XML文本解析,使用WebService產(chǎn)生的基于XML格式的數(shù)據(jù),可以被各種語言開發(fā)的應(yīng)用所讀取,實現(xiàn)了不同語言之間的通信。例如Java語言開發(fā)的服務(wù)端程序,可以與用C或C#語言開發(fā)的客戶端利用XML進(jìn)行通信,實現(xiàn)數(shù)據(jù)共享。
2 WebService的應(yīng)用場合
1)跨防火墻的通信
現(xiàn)時,全國技工學(xué)校學(xué)籍管理系統(tǒng)、學(xué)生資助管理系統(tǒng)等一系列的應(yīng)用在全國各地職業(yè)類學(xué)校全面鋪開使用,為全國各地監(jiān)控、管理、共享技工院校的學(xué)生信息提供了方便。面對分布在全國各地的院校用戶,其校園信息系統(tǒng)使用不同的平臺,也架設(shè)了防火墻或代理服務(wù)器,客戶端和服務(wù)器之間的通信是一個難題。
為解決這個難題,傳統(tǒng)的做法是以瀏覽器作為客戶端,服務(wù)器端以ASP、PHP等技術(shù),通過編寫一系列動態(tài)頁面,包含數(shù)據(jù)查詢處理邏輯的中間層組件,對客戶的輸入進(jìn)行處理并以HTML的形式返回給客戶。這樣做的結(jié)果是開發(fā)難度大,程序很難維護(hù)。
另外一種做法是,使用WebService開發(fā)一個API接口作為中間層,讓各院校的本地程序通過該接口直接調(diào)用服務(wù)器的數(shù)據(jù)。訪問WebService,可以通過由Microsoft SOAP Toolkit或.NET等編寫的SOAP客戶端,也可以通過用戶自定義的SOAP客戶端,然后將其和本地應(yīng)用程序連接起來。利用WebService,既減少了代碼復(fù)雜度和程序開發(fā)工作量,也增強(qiáng)了應(yīng)用程序的可維護(hù)性。
2)實現(xiàn)軟件和數(shù)據(jù)重用
除了重用代碼,在重用數(shù)據(jù)方面,WebService也同樣出色。使用WebService,在互聯(lián)網(wǎng)的環(huán)境下,程序只需要直接調(diào)用遠(yuǎn)端的WebService,就可以使用相應(yīng)的服務(wù)和數(shù)據(jù)。例如,要獲取全國各地實時的天氣情況,只需把獲取請求直接發(fā)送給中國國家氣象局等官方提供的WebService,它就會幫你查閱相關(guān)的信息并返回。這樣的需求如果要通過組件重用來實現(xiàn)是很難的,因為程序運(yùn)行的平臺必須下載并安裝好包含所有地區(qū)天氣信息的數(shù)據(jù)庫,即便如此,該數(shù)據(jù)庫還不能實時更新,與官方提供的數(shù)據(jù)同步。
現(xiàn)在比較流行的另一種軟件重用,是在網(wǎng)站上將幾個應(yīng)用程序的功能加以集成。例如,要建立一個綜合性的門戶站點(diǎn),讓用戶在站內(nèi)可以查詢天氣、交通狀況,了解股市行情,可以在線瀏覽各大電商站點(diǎn)的產(chǎn)品并下訂單,在線訂票等,這在很多網(wǎng)站上已經(jīng)實現(xiàn)。各種服務(wù)機(jī)構(gòu)將查詢快遞、訂票等單一的功能通過WebService提供給外部,門戶網(wǎng)站就可以迅速地將這些功能整合到自身,為用戶提供友好的查詢界面,使用戶在一個站點(diǎn)上就可以使用多種生活信息服務(wù),非常便利。
從以上應(yīng)用可以看出,WebService在完成基于Web的交互性操作或?qū)嵤┻h(yuǎn)程調(diào)用、分布式共享的時候是最有用的。
3 WebService實例——學(xué)生查詢接口的實現(xiàn)
下面以校園信息系統(tǒng)中學(xué)生信息查詢接口的實現(xiàn)為例,詳細(xì)說明WebService在.NET下的開發(fā)過程。在實際的應(yīng)用中,為了安全起見,如果需要調(diào)用接口,還需要程序?qū)崿F(xiàn)身份的驗證過程,例如用MD5加密驗證來確保調(diào)用接口的安全性。該實例在Visual Studio 2010開發(fā)環(huán)境下調(diào)試完成。程序所使用的學(xué)生信息表其結(jié)構(gòu)主要字段如表1所示。
1) 創(chuàng)建Web服務(wù)程序并編寫學(xué)生信息查詢代碼,如圖2所示。[using System;
…… //省略部分引用代碼
using System.Collections;
namespace WebService
{
///
/// StuAPI 的摘要說明
///
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允許使用 ASP.NET AJAX 從腳本中調(diào)用此 Web 服務(wù),請取消對下行的注釋。
// [System.Web.Script.Services.ScriptService]
public class CommonService : System.Web.Services.WebService
{
///
/// 返回學(xué)生數(shù)據(jù)列表以及學(xué)生詳情
///
///
[WebMethod]
public List
{
DataSet ds;
StringBuilder strSql = new StringBuilder();
strSql.Append("select SSI_ID,SSI_PSW,SSI_StudentNo,SSI_Name,SSI_Sex_out,DSB_ID,DSB_BlockName,CGI_ID,CGI_Name,CCI_ID,
CCI_Name,CDep_ID,CDep_Name,CCI_IsGraduate");
strSql.Append(" FROM STU_V_StuInfo ");
if (strWhere.Trim() != "")
{
strSql.Append(" where " + strWhere);
}
ds = DbHelperSQL.Query(strSql.ToString());
return (new kangkai.verp.BLL.Stu.STU_V_StuInfo()).DataTableToListWS(ds.Tables[0]);
}
}
} ]
2) 部署到服務(wù)器后,調(diào)用API接口,如圖3所示。
3) 輸入條件即可查詢到接口數(shù)據(jù),返回結(jié)果如圖4所示。
[<?xml version="1.0" encoding="UTF-8"?>
-
-
…… //省略部分返回結(jié)果
]
4 小結(jié)
本文通過校園信息系統(tǒng)中學(xué)生信息查詢接口的實現(xiàn),介紹了.NET環(huán)境下以C#語言編寫WebService過程。從全國技工院校學(xué)生信息管理系統(tǒng)、跨公司的商務(wù)交易集成、天氣預(yù)報數(shù)據(jù)獲取等實際應(yīng)用可以看到,通過利用WebService,達(dá)到了各個不同系統(tǒng)之間數(shù)據(jù)共享之目的,突破了不同語言下的應(yīng)用不能互相兼容的障礙,實現(xiàn)了異構(gòu)系統(tǒng)之間的整合與統(tǒng)一。當(dāng)然,WebService也不是萬能的。在某些場合的開發(fā)中,就不適宜采用WebService,例如:
1) 單機(jī)應(yīng)用程序的開發(fā)
目前,單機(jī)的桌面應(yīng)用程序還有一定的市場,這些程序一般只需要與本機(jī)上的其他應(yīng)用通信,不需要通過HTTP傳輸數(shù)據(jù)。這樣的話,最好不要用WebService,只采用本地的API就可以了,或者編寫COM也是不錯的選擇,因為它體積小,運(yùn)行速度快。同樣,在一臺服務(wù)器上運(yùn)行的服務(wù)器軟件也是這樣,最好直接使用COM或其他本地的API來進(jìn)行應(yīng)用程序間的調(diào)用。當(dāng)然WebService也能在這些場合使用,但開發(fā)的成本較高,對機(jī)器資源的消耗較大。
2) 同構(gòu)應(yīng)用程序的開發(fā)
在某些應(yīng)用中,幾乎所有的模塊都是使用同一種語言如VB或VC開發(fā)的,都在同一個局域網(wǎng)中相互通信,例如,有兩個服務(wù)器端程序需要相互通信,或者有一個Win32或WinForm的客戶程序需要連接局域網(wǎng)上另一個服務(wù)端程序,這種情況下,使用DCOM會比SOAP或HTTP更有效。
在實際開發(fā)中,程序員需要從應(yīng)用程序結(jié)構(gòu)和應(yīng)用目標(biāo)的角度出發(fā),對多種開發(fā)模式進(jìn)行比較,并進(jìn)行有效的測試與維護(hù),將WebService用對、用好。
參考文獻(xiàn):
[1] 胡澤,廖聞劍,彭艷兵.WebService技術(shù)研究及應(yīng)用[J].硅谷,2009(5).
[2] 尹兆冰,王加陽.Web Service及其關(guān)鍵技術(shù)研究綜述[J].軟件導(dǎo)刊,2010(2).
[3] 楊東.Web服務(wù)中若干問題的研究[D].吉林:吉林大學(xué),2014.
[4] 王向方,武偉,唐偉媛.WebService技術(shù)在企業(yè)中的應(yīng)用[J].電腦編程技巧與維護(hù),2015(2).
[5] 王建品,李科.WebService在網(wǎng)絡(luò)地理信息系統(tǒng)構(gòu)建中的應(yīng)用[J].商丘師范學(xué)院學(xué)報,2009(9).
[6] 謝寶智,王劉凱.基于XML和Web Service的數(shù)據(jù)集成中間件[J].信息技術(shù),2010(1).