摘要:傳統(tǒng)的Web服務(wù)不能進(jìn)行狀態(tài)的保存。為了實(shí)現(xiàn)有狀態(tài)的Web服務(wù),文章研究了基于數(shù)據(jù)庫(kù)的有狀態(tài)Web服務(wù)和基于單件模式的有狀態(tài)Web服務(wù)兩種實(shí)現(xiàn)方法。并以身份驗(yàn)證為例,分析了Web服務(wù)的消息傳遞機(jī)制,探討了有狀態(tài)Web服務(wù)在.NET框架中的實(shí)現(xiàn)方法。
關(guān)鍵詞:Web服務(wù);有狀態(tài);無(wú)狀態(tài);單件模式;.NET框架
0 引言
隨著Web服務(wù)應(yīng)用范圍的不斷擴(kuò)展,靈活的消息傳遞機(jī)制在許多復(fù)雜網(wǎng)絡(luò)應(yīng)用中變得越來(lái)越重要。目前的Web服務(wù)能夠很好地提供無(wú)狀態(tài)的信息服務(wù),如提供公共信息服務(wù)、企業(yè)結(jié)構(gòu)信息服務(wù)。但是傳統(tǒng)的Web服務(wù)不能提供有狀態(tài)的信息服務(wù),如用戶是否在線、在線時(shí)長(zhǎng)等,因?yàn)槠浔旧聿槐4鏍顟B(tài)。在Web服務(wù)的調(diào)用中要傳遞大量的狀態(tài)信息,一方面安全性不能保證,另一方面浪費(fèi)了網(wǎng)絡(luò)資源。
通常,每個(gè)Web服務(wù)對(duì)象僅能被一個(gè)客戶端所使用,它們由每個(gè)客戶端調(diào)用創(chuàng)建,調(diào)用完后被銷毀,并且第一次調(diào)用和后面的調(diào)用之間都沒(méi)有保存狀態(tài)。如圖1描述了遠(yuǎn)程Web服務(wù)的調(diào)用過(guò)程,客戶端進(jìn)程通過(guò)SOAP把請(qǐng)求參數(shù)組織成XML文檔并使用HTTP把請(qǐng)求送到Web服務(wù)器。SOAP是一種輕量級(jí)的通信協(xié)議,它用XML語(yǔ)言定義格式,在通信傳輸上遵從HTTP協(xié)議。HT]TP是個(gè)無(wú)狀態(tài)協(xié)議,服務(wù)器在給客戶機(jī)發(fā)送應(yīng)答信息后便遺忘了此次交互,其狀態(tài)信息并未被保存。因此,Web服務(wù)適合無(wú)狀態(tài)的解決方案。例如,某個(gè)客戶端第一次調(diào)用Web服務(wù)進(jìn)行了用戶身份驗(yàn)證以后,若再次調(diào)用Web服務(wù)實(shí)現(xiàn)具體的功能,由于Web服務(wù)不保存狀態(tài),這種調(diào)用就沒(méi)有辦法使用Web服務(wù)實(shí)現(xiàn)。當(dāng)然可以每調(diào)用一次Web服務(wù),同時(shí)進(jìn)行身份驗(yàn)證,并且執(zhí)行具體功能,但是這種方式存在很大的缺陷:一方面存在安全缺陷,另一方面將大部分的資源都用在驗(yàn)證身份的操作上,降低了系統(tǒng)性能。
針對(duì)Web服務(wù)不能保存狀態(tài)這一不足,有兩種不同的途徑去解決它。一種途徑是制定新的標(biāo)準(zhǔn);另一種途徑是在現(xiàn)有技術(shù)的基礎(chǔ)上,加入狀態(tài)的特征。本文主要針對(duì)第二種途徑展開(kāi)研究,探討了基于數(shù)據(jù)庫(kù)的有狀態(tài)Web服務(wù)和基于單件模式Web服務(wù)兩種解決方案,并以身份驗(yàn)證為例,分別應(yīng)用這兩種方法進(jìn)行了實(shí)現(xiàn)。
1 基于數(shù)據(jù)庫(kù)的有狀態(tài)Web服務(wù)
1.1基本原理
注:“本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文”