日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

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

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

' 這里并沒有與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時,一切正常,Web方法返回1,這就是那個Session變量的應(yīng)有的初始值�,F(xiàn)在我點擊Button1來再次調(diào)用這個Web方法,我希望看到的返回值是2�?上У氖�,無論我點擊多少次Button1,返回值一直都是1。

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


  問題在于cookie。Web Service代碼并未從調(diào)用請求中發(fā)現(xiàn)有效的會話ID,因此它每次被調(diào)用都創(chuàng)建一個全新的HttpSessionState對象,并且返回它的初始值1。因為作為客戶端的proxy類是從類System.Web.Service.Protocols.SoapHttpClientProtocol繼承的,它不包含System.Net.CookieContainer類的實例,因此,沒有地方來存放返回的cookie。為了解決這個問題,我對代碼做了如下一些修改:

' 使用了ASP.NET的session
' 但是并不是無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)在代碼工作正常了!每點擊一次Button1,我都可以看到返回值增加1。注意到我并不是在函數(shù)中聲明變量Cookies的,它是窗體類的一個私有成員,因為如果希望每次都返回同一個會話ID給服務(wù)器的話,就必須在每次請求中使用CookieContainer類的同一個實例。這就解釋了為什么SoapHttpClientProtocol類默認(rèn)不自動地設(shè)置的cookie容器。正應(yīng)為此,你可以在多個SoapHttpClientProtocol類的實例中共享一個cookie容器,而不是為其每個實例自動地創(chuàng)建一個新的cookie容器。

無cookie的Session

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

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