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