摘要:傳統的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服務實現。……