羅海濤
摘 要: Web服務基于標準的數(shù)據(jù)格式和協(xié)議,如XML、SOAP和HTTP,不同平臺和操作系統(tǒng)的客戶和服務端可以基于同樣的協(xié)議,沒有障礙地通信,Web服務客戶端只需標識Web服務的位置及其可以調用的方法,就可以簡單地使用Web服務。微軟公司的.NET框架針對Web服務提供了廣泛的支持。因此研究了.NET環(huán)境下Web Services的構建、處理流程,舉例說明了Web服務的典型應用。
關鍵詞: .NET框架; Web服務; 服務構建; 應用
中圖分類號:TP311.11 文獻標志碼:A 文章編號:1006-8228(2014)11-22-02
Construction and application research of Web Services
Luo Haitao
(School of Informatics, Guangdong University of Foreign Studies, Guangzhou, Guangdong 510420, China)
Abstract: Web Service is based on standard protocols such as XML, SOAP and HTTP. Client and server with different OS can communicate freely based on the same protocols. The client simply identifies the location and method of Web Service when it uses the services. The .NET Framework of Microsoft Company provides wide support to Web Services. The construction and processing of Web Services under .NET Framework are analyzed. Typical examples of Web Services are proposed.
Key words: .NET framework; Web Services; service construction; application
0 引言
隨著Internet的發(fā)展和深入普及,基于Internet的Web應用得到了快速發(fā)展。從早期使用HTML標記語言設計的靜態(tài)網(wǎng)頁,到使用CGI、ASP、JSP、PHP、ASP.NET開發(fā)設計的動態(tài)網(wǎng)站,實現(xiàn)的功能越來越復雜[5]。2002年微軟開發(fā)出了.NET框架(.NET Framework),提供了一種開發(fā)Web應用程序,包括Web服務的全新模式,其底層用類實現(xiàn),是一種面向對象的實現(xiàn)方法。十幾年來.NET框架幾經(jīng)發(fā)展,已可以在這個框架下利用VB.NET、C#、C++或JScript.NET等程序語言,進行WEB應用程序設計(即通常說的動態(tài)網(wǎng)頁/網(wǎng)站)、Web服務應用、Windows應用程序設計、控制臺應用程序設計等。
Web服務又叫XML Web Service,Web服務基于“簡單對象訪問協(xié)議”(Simple Object Access Protocol,簡稱SOAP)。Web服務提供在一個使用標準協(xié)議(如HTTP、XML、XSD、SOAP和WSDL)的松耦合環(huán)境中交換信息的能力,先由服務開發(fā)方開發(fā),并發(fā)布能夠完成特別應用需求的在線應用服務,其他用戶或者應用軟件能夠通過Internet來訪問并使用這項在線應用服務。XML Web Services基礎結構建立在基于XML的消息通信之上,這些消息遵循服務開發(fā)方根據(jù)具體服務發(fā)布的服務說明。服務說明是用名為WSDL(Web 服務描述語言)的XML語法編寫的XML文檔,它定義XML Web Services要求的消息格式,起協(xié)議的作用,它定義XML Web Services的行為和功能,并指示潛在客戶端如何與該服務進行交互。Web服務返回給客戶端的是數(shù)據(jù),而不是網(wǎng)頁。Web服務技術規(guī)范仍然在飛速發(fā)展中,各種新的Web服務技術規(guī)范和定義層出不窮。各個主要的軟件平臺廠商如微軟、IBM和SUN等公司也都不遺余力地推出各類操作系統(tǒng)和開發(fā)平臺對Web服務提供廣泛的支持。微軟公司的.NET平臺針對Web服務提供了廣泛的支持,是一個比較適合于構建Web服務的平臺。
1 Web Services的構建及處理流程
在.NET框架下,構建Web Services大致有三個步驟。第一步,建立一個包含Web Services的擴展名為.asmx的Web服務文件,文件中定義一個類,在類中定義提供Web Services的方法或者函數(shù)。第二步,用.NET框架提供的工具wsdl對Web服務文件進行處理,處理時可以指定名稱空間(Namespace)的名字,生成SOAP代理類文件;文件中定義一個剛剛處理時指定名字的Namespace,在Namespace中定義類,類中定義提供Web服務的相應的方法和函數(shù);如果前面的.asmx的Web服務文件指定語言為VB,則代理類為“.vb”類型文件,如果.asmx的Web服務文件指定語言為C#,則代理類為“.cs”類型文件。第三步,用vbc(對“.vb”文件)或者csc(對“.cs”文件)工具對上一步生成的SOAP代理類文件進行編譯,生成“.dll”文件,再把它部署到應用程序根目錄下的bin文件夾。之后,客戶就可以通過該代理類調用這個Web服務。如果是Visual Studio.NET,這些工作是自動完成的,基本的步驟一樣。
客戶端通過代理類訪問服務端的Web服務,代理類使用XML序列化技術把請求序列化成SOAP消息。代理類發(fā)出的服務請求可以采用HTTP GET、HTTP POST或者HTTP SOAP協(xié)議。當客戶端請求服務端的Web服務時,服務器的IIS把被請求的.asmx文件映射到Aspnet_isapi.dll,后者則通過請求處理管道把請求轉發(fā)給ASP.NET工作進程,之后.NET框架就會通過HttpRuntime來處理這個請求。首先,該請求被送入HttpApplication實例,進入HttpModule,HttpModule完成身份驗證、授權和緩沖等工作;然后HttpRuntime核實.asmx文件,注冊到WebServiceHandlerFactory Handler并創(chuàng)建一個HTTP handler,它是WebServiceHandler的對象實例,負責處理Web服務請求。HTTP handler再把SOAP消息翻譯成Web方法調用。
2 Web Services典型應用
⑴ Web服務返回DataSet對象[4]
假設一個搜索引擎專門從各網(wǎng)站搜索體育消息,對各類消息分門別類,例如足球消息、籃球消息、田徑消息等等,保存在數(shù)據(jù)庫sportsnews.mdb的表“sports_news”中,每類消息設置了相應的關鍵字,以便查詢。該搜索引擎向Internet用戶提供免費查詢各類消息的服務,客戶端界面如圖1所示。
圖1 體育新聞搜索服務的客戶端界面
服務器端的.asmx服務文件主要代碼如下:
Public Class SportsNews :Inherits WebService
string) As DataSet
Dim connection1 As New OleDbConnection("Provider=
Microsoft.Jet.OLEDB.4.0; Data Source=" & Server
.Mappath("sportsnews.mdb"))
Dim StrSql As String
StrSql="Select * From sportsnews Where newsType
='" & NewsType & "'"
Dim adptr As New OleDbDataAdapter(StrSql, connection1)
Dim ds1 As New DataSet()
adptr.Fill(ds1, "sportsnews")
Return(ds1)
End Function
End Class
該服務文件由wsdl工具轉換為“.vb“文件,轉換時指定名稱空間myService1,則轉換后的“.vb“文件自動產(chǎn)生一行代碼“Namespace myService1”,后面的代碼則根據(jù).asmx文件規(guī)定,生成相應的類及相關的服務方法和函數(shù)。之后用vbc工具進行編譯,生成dll文件,并將該文件部署到應用程序根目錄的bin文件夾即可。
客戶端通過代理類調用Web服務,主要代碼如下:
Sub Enter_Click(Sender As Object, E As EventArgs)
Dim ds As New DataSet()
Dim mn As New myNews()
ds=mn.SelectNews(keyword.Text)
MyDataGrid.DataSource=DS.Tables(0).DefaultView
MyDataGrid.DataBind()
End Sub
以下僅列出html部分中的表單form部分:
⑵ 利用SoapHeader傳遞用戶憑據(jù)[3]
如果是有償服務,服務器端可以要求客戶端提供憑據(jù),憑據(jù)驗證通過后才提供服務。下面的例子假設Web服務提供了求兩個整數(shù)的平方和計算,返回整數(shù),客戶端可以通過SoapHeader傳遞用戶名和密碼,并假設用戶名為Luo,密碼為123才能通過驗證,實際應用中可以根據(jù)客戶端傳遞的用戶憑據(jù)到數(shù)據(jù)庫中查找,服務程序文件如下所示:
namespace theNamespace {
public class theHeader : SoapHeader {
public string Username, Password;
}
public class theService {
public theHeader sHeader;
[WebMethod][SoapHeader("sHeader")]
public int theSquare(int a, int b) {
if (sHeader==null) return -1;
string usr=sHeader.Username;
string pwd=sHeader.Password;
if (AuthenticateUser(usr, pwd)) return a*a+b*b;
else return -1;
}
private bool AuthenticateUser(string usr, string pwd) {
if ((usr=="Luo")&&(pwd=="123")) return true;
return false;
}
}
}
客戶端程序主要代碼如下:
theService s1=new theService();
theHeader myHeader=new theHeader();
myHeader.Username="Luo";
myHeader.Password="123";
s1.theHeaderValue=myHeader;
Response.Write(s1.theSquare(3,4));
除了上述兩種典型的方法實現(xiàn)Web服務應用外,還有很多其他方法應用Web服務。例如,利用WSE技術傳遞UsernameToken令牌以及加密SOAP消息,這是一種更加安全的應用方法。Web Services Enhancements(WSE)是微軟公司發(fā)布的一種針對Web Service的增強技術,通過WSE技術可以把安全、路由、附件等技術同Web Service完美地結合在一起,通過在SOAP消息中添加一個或多個安全性憑據(jù),對SOAP消息進行數(shù)字簽名和加密SOAP消息來實現(xiàn)SOAP消息級別的安全性[1]。
而異步Web服務調用也是一種可以考慮的選擇。在異步調用中,向Web服務發(fā)出請求后,客戶端不必等待請求結束,可以繼續(xù)執(zhí)行其他任務。服務器端不用特別的設置,就像普通Web服務一樣即可。.NET Framework的異步調用方法的設計模式指定每個同步方法都有兩個異步方法。對于每個同步方法,都有一個Begin異步方法和一個End異步方法[2]。
3 結束語
Web服務因為客戶端和服務器端通信消息采用XML文本格式,便于不同平臺系統(tǒng)之間的通信,因此在一個基于Web服務的模型中,客戶不需要考慮服務器端使用的語言和操作系統(tǒng),不同平臺和操作系統(tǒng)的客戶端和服務器端可以基于同樣的協(xié)議,沒有障礙地通信??蛻舳酥恍铇俗RWeb服務的位置及其可以調用的方法,就可以簡單地使用Web服務。微軟公司的.NET框架針對Web服務提供了廣泛的支持。為了提高服務的安全性,微軟的.NET框架同時提供了WSE技術(Web Services Enhancements)。WSE提供對Web服務技術規(guī)范的支持,包括WS-Routing、WS-Security和WS-Attachment??傮w而言,其.NET框架是實現(xiàn)Web服務的簡單而且便利的平臺。本文舉例說明了.NET環(huán)境下,Web服務的構建及其典型的應用,以供讀者參考。
參考文獻:
[1] Peter Thorsteinson,G. Gnana Arun Ganesh著,梁志敏,蔡建譯,
.NET安全性與密碼術[M].清華大學出版社,2004.
[2] J.D. Meier, Srinath Vasireddy, Ashish Babbar, Alex Mackman,
Improving Web Services Performance. http://msdn2.microsoft.com/en-us/library/ms998562.aspx,2004.
[3] 石志國等.ASP.NET應用教程[M].清華大學出版社,2005.
[4] 尚俊杰.ASP.NET程序設計[M].清華大學出版社,2004.
[5] 崔淼等.ASP.NET程序設計教程(C#版)(第2版)[M].機械工業(yè)出版社,
2011.