在Web Service中使用ASP.net狀態(tài)保持(1)_Windows教程
簡(jiǎn)介
有許多聰明的辦法可以解決HTTP協(xié)議的無(wú)狀態(tài)問(wèn)題,例如對(duì)每個(gè)請(qǐng)求重復(fù)發(fā)送應(yīng)用程序數(shù)據(jù)包、使用HTTP認(rèn)證機(jī)制來(lái)將請(qǐng)求映射到特定的用戶、使用Cookie來(lái)存儲(chǔ)一系列請(qǐng)求的狀態(tài)等。在ASP.net技術(shù)中提供了一個(gè)非常有效的方案來(lái)保持狀態(tài),該方案隱藏了所有高難度的,具有挑戰(zhàn)性的工作的細(xì)節(jié),用戶只需簡(jiǎn)單地使用System.Web.SessionState.HttpSessionState類。同時(shí),你也可以像在ASP.net程序地Web頁(yè)面(.aspx)中一樣在Web Service的方法中使用這個(gè)類,只有一點(diǎn)小小的不同。
ASP.net的Session對(duì)象概述
ASP.net的Session狀態(tài)信息在根本上通過(guò)兩個(gè)機(jī)制保持。其一是使用Cookie。當(dāng)客戶端發(fā)送一個(gè)請(qǐng)求到服務(wù)器端時(shí),服務(wù)器將發(fā)回一個(gè)附加HTTP Set-Cookie頭的響應(yīng)信息,而Cookie的值就是以鍵/值對(duì)的形式保存在該信息里邊。在對(duì)同一服務(wù)器的所有的同步請(qǐng)求中,客戶端在HTTP Cookie頭中發(fā)送Cookie鍵/值對(duì)。然后服務(wù)器可以將并發(fā)的請(qǐng)求同初始的請(qǐng)求對(duì)應(yīng)起來(lái)。ASP.net使用一個(gè)保存會(huì)話的ID的cookie來(lái)保持會(huì)話狀態(tài)。該ID標(biāo)識(shí)被用來(lái)為特定的用戶找到與其對(duì)應(yīng)的HttpSessionState類的實(shí)例。類HttpSessionState僅僅提供了一個(gè)通用的數(shù)據(jù)集,你可以在其中保存你需要的任何信息。
ASP.net用來(lái)保持狀態(tài)的另外一個(gè)機(jī)制工作時(shí)無(wú)須使用Cookie。一些瀏覽器被用戶設(shè)置為禁止使用cookie或者干脆就不支持Cookie,ASP.net提供了一種機(jī)制來(lái)解決這個(gè)問(wèn)題,它的主要原理是將一個(gè)請(qǐng)求重定向到一個(gè)包含ASP.net狀態(tài)ID的URL。當(dāng)該請(qǐng)求被接受到時(shí),這個(gè)嵌在URL中的ID被截取下來(lái),服務(wù)器通過(guò)該ID找到合適的HttpSessionState類的實(shí)例。這種方式在HTTP協(xié)議的使用GET方式的請(qǐng)求中工作的很好,但是在.net的XML Web Service代碼中會(huì)出現(xiàn)問(wèn)題。
必須指出的是,有些時(shí)候把信息直接存儲(chǔ)在Cookie中要比存儲(chǔ)在Session中更好。避免使用Session可以節(jié)省服務(wù)器資源,而且你也無(wú)須考慮一些煩人的問(wèn)題,比如定位一個(gè)特定的Session對(duì)象、Session對(duì)象因?yàn)檎?qǐng)求的長(zhǎng)時(shí)間的延遲而被移除或者在服務(wù)器上沒(méi)必要地保留直到過(guò)期。然而,如果你有一些包含你不希望與你提供的服務(wù)的使用者共享的執(zhí)行信息,或者有一些你不希望通過(guò)未加密的信道傳輸?shù)乃接袛?shù)據(jù),或者你認(rèn)為將這些數(shù)據(jù)插入HTTP協(xié)議頭中是不切實(shí)際的,那么你就應(yīng)該使用ASP.net中的HttpSessionState,它將使你輕松解決這些問(wèn)題。HttpSessionState類返回一個(gè)索引鍵,用以將一個(gè)特定的用戶映射到一個(gè)為該用戶保存信息的HttpSessionState類的實(shí)例�?傊�,無(wú)論是ASP.net的HttpSessionState類還是HTTP的Cookie都可以在ASP.net Web Service中使用。
在XML Web Service中使用基于HTTP的機(jī)制來(lái)實(shí)現(xiàn)狀態(tài)保持的理由
在SOAP請(qǐng)求中有許多方法來(lái)保持狀態(tài)。一個(gè)切實(shí)可行的方法就是在SOAP頭中包含一些像ASP中的會(huì)話ID的信息,然而問(wèn)題在于你不得不:
1) 仍然要自己編寫(xiě)服務(wù)器端代碼。
2) 確信你的客戶會(huì)像對(duì)待HTTP Cookie一樣對(duì)待你的包含會(huì)話ID的SOAP頭并且將它附加到每個(gè)請(qǐng)求中回傳給你。
當(dāng)然有很多時(shí)候使用SOAP頭的方法會(huì)很方便,但是也有很多時(shí)候還不如使用基于HTTP協(xié)議的方法。
Windows教程Rss訂閱服務(wù)器教程搜索
Windows教程推薦
- 讓W(xué)eb服務(wù)走向門(mén)戶網(wǎng)站(3)
- Win2003服務(wù)器組網(wǎng)、安全管理全攻略
- 個(gè)人服務(wù)器架設(shè)全攻略(06)
- 一個(gè)安全WEB服務(wù)器的安裝(2)
- Windows2003服務(wù)器入侵前兆檢測(cè)
- 個(gè)人服務(wù)器架設(shè)全攻略(37)
- 在WIN2003 Server 中設(shè)定防火墻保護(hù) SQL SERVER 自定義 IP
- 個(gè)人服務(wù)器架設(shè)全攻略(87)
- 基于Jave的Web服務(wù)工作機(jī)制(5)
- 個(gè)人服務(wù)器架設(shè)全攻略(27)
- 相關(guān)鏈接:
- 教程說(shuō)明:
Windows教程-在Web Service中使用ASP.net狀態(tài)保持(1)
。