李超燕 周建良
摘 要: Web服務(wù)是在網(wǎng)上發(fā)布的一種服務(wù)。在進(jìn)行應(yīng)用程序開發(fā)時(shí),可以直接來調(diào)用該服務(wù),而簡化開發(fā)流程。本文對Web服務(wù)所采用的主要技術(shù)進(jìn)行了闡述,并且通過一個軟件開發(fā)中的實(shí)際應(yīng)用讓大家來掌握如何對網(wǎng)上存在的Web服務(wù)進(jìn)行調(diào)用和調(diào)試。
關(guān)鍵詞: Web服務(wù); Web引用; 第三方Web服務(wù)
中圖分類號: TP 319 文獻(xiàn)標(biāo)志碼: A 文章編號: 1671-2153(2015)04-0072-03
0 引 言
Web 服務(wù)是通過Web 進(jìn)行發(fā)布、定位和調(diào)用的松散耦合組件。由于Web 服務(wù)具有完好的封裝性、松散耦合、高度集成能力等特點(diǎn),Web 服務(wù)成為越來越多企業(yè)實(shí)現(xiàn)大規(guī)模軟件開發(fā)和服務(wù)共享的解決方案[1]。在各大網(wǎng)站中經(jīng)常可以看到查詢天氣預(yù)報(bào)、查詢火車班次、查詢IP地址所在地、查詢手機(jī)號碼歸屬地等功能。這里的部分功能可以自己編寫代碼來實(shí)現(xiàn),而有一些是需要相關(guān)部門來提供接口,如天氣預(yù)報(bào)。其實(shí),在網(wǎng)上已經(jīng)提供了實(shí)現(xiàn)這些功能模塊的Web服務(wù),我們只需直接調(diào)用這些Web服務(wù)的接口就可以了。本文將通過一個實(shí)例來介紹如何調(diào)用這些Web服務(wù)。
1 軟件結(jié)構(gòu)設(shè)計(jì)
這里利用asp.net開發(fā)完成了一個電子商務(wù)的購物網(wǎng)站,在該網(wǎng)站中有用戶登錄購物的這樣一個模塊,如圖1所示。
如果用戶直接輸入用戶名和密碼進(jìn)行登錄,那么這樣的登錄模塊非常容易被黑客攻擊。為了防止用戶利用軟件進(jìn)行惡意登錄,可以提供讓用戶輸入驗(yàn)證碼。驗(yàn)證碼可以自己編寫,不過自己編寫代碼來實(shí)現(xiàn)驗(yàn)證碼的功能不是那么容易的,其實(shí)可以在網(wǎng)上找到第三方提供的驗(yàn)證碼Web服務(wù)。本文介紹了如何使用第三方提供的Web服務(wù)來實(shí)現(xiàn)登錄模塊中的驗(yàn)證碼功能。在本項(xiàng)目中要調(diào)用第三方的Web服務(wù)來實(shí)現(xiàn)驗(yàn)證碼功能的軟件執(zhí)行過程如圖2所示。
2 軟件功能實(shí)現(xiàn)
(1) 為項(xiàng)目添加Web引用
在asp.net開發(fā)的電子商務(wù)網(wǎng)站開發(fā)項(xiàng)目中添加Web引用,可以尋找一個第三方的Web服務(wù),在此使用http://webservice.webxml.com.cn/WebServ
ices/ValidateCodeWeb Service.asmx,修改Web的引用名為IdentifyCodeWS,添加成功后的Web引用文件內(nèi)容如下:
<?xml version="1.0" encoding="utf-8"?>
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> referenceType="System.Web.Services.Discovery.DiscoveryDocumentReference" url="http://webservice.webxml.com.cn/webservices/validatecodewebservice.asmx?disco" filename="validatecodewebservice.disco" /> filename="validatecodewebservice.wsdl" />
在以上代碼中可以看出Web引用文件采用的是XML格式的文件,XML滲透到了Web服務(wù)的各個層次。也就是說如果沒有XML就沒有Web服務(wù)。在引用文件內(nèi)容中包含了WSDL文件,該文件是用來對Web服務(wù)的位置、接口和協(xié)議做詳細(xì)說明的文檔。WSDL是一種XML應(yīng)用,它將Web 服務(wù)描述定義為一組服務(wù)訪問點(diǎn),請求者可以通過這些服務(wù)訪問點(diǎn)對服務(wù)進(jìn)行訪問[3]。這里所引用的Web服務(wù)的地址,最后是以.asmx結(jié)尾的。在瀏覽器中輸入http://webservice.webxml.com.cn/webservic
es/validatecode webservice.asmx可以發(fā)現(xiàn)在該頁中提供了6種驗(yàn)證碼服務(wù)。在訪問Web服務(wù)時(shí)采用的協(xié)議是SOAP協(xié)議,該協(xié)議是是以XML為基礎(chǔ)的消息傳輸協(xié)議,可以采用XML安全協(xié)議來保證Web 服務(wù)的安全性[2]。
(2) 在項(xiàng)目中添加IdentifyCode.aspx頁面用于生成驗(yàn)證碼,在所對應(yīng)的.cs頁面中添加如下的代碼
IdentifyCodeWS.ValidateCodeWebService vcws = new IdentifyCodeWS.ValidateCodeWebService();
protected void Page_Load(object sender, EventArgs e)
{
if(Request.Params["validateDate"]!=null)
{ int i=Int32.Parse(Request.Params["validateDate"].ToString());
Response.ContentType="image/png";
byte[] b=vcws.enValidateByte(i.ToString());
Response.BinaryWrite(b);
}
}
在IdentifyCode.aspx頁面中實(shí)例化Web服務(wù)對象,在此處的Request.Params["validateDate"]代表在登錄頁面login.aspx中隨機(jī)生成的對象作為參數(shù)傳遞給IdentifyCode.aspx頁面,并且在該頁面中返回一個二進(jìn)制字符串,將它寫入HTTP輸出流。
(3) 在登錄頁面中,添加如下的代碼,實(shí)現(xiàn)登錄功能和驗(yàn)證碼的生成
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Random rd = new Random();
string str = rd.Next(1000,9999).ToString();
Image1.ImageUrl = "IdentifyCode.aspx?validateDate=" + str;
Session["validateDate"] = str;
}
}
在登錄頁面中,實(shí)例化隨機(jī)對象,并且生成一個1000-9999之間的隨機(jī)數(shù),將隨機(jī)數(shù)傳遞給IdentifyCode.aspx頁面, 將Web服務(wù)中返回的隨機(jī)圖片驗(yàn)證碼顯示在登錄頁面的圖片中。
(4) 驗(yàn)證碼的測試和運(yùn)行
運(yùn)行登錄頁面,在流覽器中打開該頁面,可以看到有驗(yàn)證碼的登錄頁面,如圖3所示,該驗(yàn)證碼的實(shí)現(xiàn)就是調(diào)用了網(wǎng)上所存在的Web服務(wù),這樣可以大大簡化我們的開發(fā)工作。利用這種調(diào)用方式可以非常方便的來實(shí)現(xiàn)復(fù)雜的功能模塊,而不需要知道該功能具體是如何用代碼編寫的,只要知道Web服務(wù)所提供的接口就可以了。
3 結(jié)束語
本文介紹了Web服務(wù)的架構(gòu),并且通過登錄時(shí)驗(yàn)證碼的實(shí)現(xiàn)介紹了如何調(diào)用Internet上發(fā)布的Web服務(wù),在Internet上發(fā)布了各種功能的Web服務(wù),在進(jìn)行軟件開發(fā)時(shí),可以調(diào)用這些Web服務(wù)來簡化軟件的開發(fā)過程。
參考文獻(xiàn):
[1] 佘青. 一種語義Web服務(wù)描述語言WSDL-S[J]. 網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2009(4):85-86.
[2] 劉振鵬,周冬冬. 一個基于SOAP消息的Web服務(wù)綜合安全模型[J]. 武漢大學(xué)學(xué)報(bào),2006,52(5):570-573.
[3] 林川. 基于UDDI和WSDL的Web 服務(wù)發(fā)布方案[J].計(jì)算機(jī)工程與設(shè)計(jì),2005(4):993-995.
(責(zé)任編輯:徐興華)