欧美日韩精品在线,国内精品久久久久久久久,一级毛片恃级毛片直播,清纯唯美亚洲综合欧美色

在Web Service中使用ASP.net狀態(tài)保持(4)_Windows教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!
下一步,我創(chuàng)建了一個(gè)簡(jiǎn)單的WinForm應(yīng)用程序,并且將上述的Web Service添加到Web引用中。下面就是調(diào)用我的Web Service的代碼:

' 這里并沒(méi)有與Session打交道
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim proxy As New localhost.Service1()
Dim ret As Integer
ret = proxy.IncrementSessionCounter()
Label1.Text = "Result: " & CStr(ret)
End Sub

當(dāng)我第一次調(diào)用Web Service時(shí),一切正常,Web方法返回1,這就是那個(gè)Session變量的應(yīng)有的初始值。現(xiàn)在我點(diǎn)擊Button1來(lái)再次調(diào)用這個(gè)Web方法,我希望看到的返回值是2。可惜的是,無(wú)論我點(diǎn)擊多少次Button1,返回值一直都是1。

你也許會(huì)懷疑原因就是我每次都創(chuàng)建了一個(gè)新的proxy類的實(shí)例去調(diào)用Web方法,因此每次我點(diǎn)擊按鈕,都會(huì)丟失上一次調(diào)用時(shí)的cookie。不幸的是,即使你將proxy類的初始化代碼移到窗體的構(gòu)造函數(shù)中,然后對(duì)每次Web方法調(diào)用使用同一個(gè)proxy類的實(shí)例,你還是不可能看到返回值有增加的跡象。


問(wèn)題在于cookie。Web Service代碼并未從調(diào)用請(qǐng)求中發(fā)現(xiàn)有效的會(huì)話ID,因此它每次被調(diào)用都創(chuàng)建一個(gè)全新的HttpSessionState對(duì)象,并且返回它的初始值1。因?yàn)樽鳛榭蛻舳说膒roxy類是從類System.Web.Service.Protocols.SoapHttpClientProtocol繼承的,它不包含System.Net.CookieContainer類的實(shí)例,因此,沒(méi)有地方來(lái)存放返回的cookie。為了解決這個(gè)問(wèn)題,我對(duì)代碼做了如下一些修改:

' 使用了ASP.NET的session
' 但是并不是無(wú)Cookie的session.
Private Cookies As System.Net.CookieContainer

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim proxy As New localhost.Service1()
Dim ret As Integer
' 為proxy類設(shè)置cookie容器
If Cookies Is Nothing Then
Cookies = New System.Net.CookieContainer()
End If
proxy.CookieContainer = Cookies
ret = proxy.IncrementSessionCounter()
Label1.Text = "Result: " & CStr(ret)
End Sub

現(xiàn)在代碼工作正常了!每點(diǎn)擊一次Button1,我都可以看到返回值增加1。注意到我并不是在函數(shù)中聲明變量Cookies的,它是窗體類的一個(gè)私有成員,因?yàn)槿绻M看味挤祷赝粋(gè)會(huì)話ID給服務(wù)器的話,就必須在每次請(qǐng)求中使用CookieContainer類的同一個(gè)實(shí)例。這就解釋了為什么SoapHttpClientProtocol類默認(rèn)不自動(dòng)地設(shè)置的cookie容器。正應(yīng)為此,你可以在多個(gè)SoapHttpClientProtocol類的實(shí)例中共享一個(gè)cookie容器,而不是為其每個(gè)實(shí)例自動(dòng)地創(chuàng)建一個(gè)新的cookie容器。

無(wú)cookie的Session

從Web Service的開(kāi)發(fā)者的角度來(lái)看,你可以想到相當(dāng)多的人在試圖使用你的Web服務(wù)時(shí)忘記在客戶端代理類中添加Cookie容器。聰明的開(kāi)發(fā)者或許靈光一閃,就會(huì)發(fā)現(xiàn)無(wú)cookie的Session應(yīng)該可以出色地解決這個(gè)問(wèn)題。如果將web.config文件中sessionState元素的cookieless參數(shù)設(shè)置為“true”,你將會(huì)發(fā)現(xiàn),通過(guò)瀏覽器界面調(diào)用Web方法時(shí),session變量工作正常,但是如果你在Visual Studio.net中通過(guò)“添加Web引用”來(lái)調(diào)用它時(shí),依然存在著一些問(wèn)題。

來(lái)源:網(wǎng)絡(luò)搜集//所屬分類:Windows教程/更新時(shí)間:2013-04-15
相關(guān)Windows教程