我使用一些的WebMethods在System.Web.UI.Page來處理一些Ajax請求,和我試圖存儲對象的會話在多個ajax請求中保留信息,甚至在離開頁面並返回之後。HttpContext.Current.Session在一個共享的方法不更改保存
我正在通過HttpContext.Current.Session("foo")
訪問會話,如果沒有,我通過HttpContext.Current.Session("foo") = New Bar()
進行設置。
我遇到的問題是,它被設置後,下一次我打的方法,它已被重置。我試着改變別處設置的其他會話變量,並且它們也被恢復。這告訴我,我正在獲取會話狀態的副本,而不是一個可以更新的引用,並可以從請求到請求持續存在。我反覆檢查的WebMethod的EnableSession
屬性爲True,但仍然改變會話狀態不被保存。
方法聲明:
<System.Web.Services.WebMethod(EnableSession:=True)>
Public Shared Function foo(ByVal woNum As String, ByVal workCenter as String) As ToolingModel
Return ToolingModel.getSessionTooling(woNum, workCenter)
End Function
getSessionTooling:
Public Shared Function getSessionTooling(woNum As String, workCenter As String) As ToolingModel
Dim tooling As ToolingModel = HttpContext.Current.Session(TOOLING_MODEL_SESSION_KEY)
If tooling Is Nothing Then
tooling = New ToolingModel(woNum, workCenter)
HttpContext.Current.Session(TOOLING_MODEL_SESSION_KEY) = tooling
ElseIf tooling.woNum <> woNum OrElse tooling.workCenter <> workCenter Then
tooling.woNum = woNum
tooling.workCenter = workCenter
tooling.assets.Clear()
End If
Return tooling
End Function
我怎樣才能讓我的更改應用於持久會話狀態,從共享的WebMethod訪問它?
編輯:發現我的問題,一個星期爲時已晚。 .aspx的第1行:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="foo.aspx.vb"
Inherits="foo" MaintainScrollPositionOnPostback="true"
MasterPageFile="~/mstrFoot.master" EnableSessionState="ReadOnly" %>
該頁面設置爲只讀會話,該會話將覆蓋PageMethod的EnableSession設置。 [facepalm]
你可以發佈函數聲明嗎?看起來,如果你添加正確的屬性,它應該工作:http://stackoverflow.com/questions/4758575/how-can-i-access-session-in-a-webmethod'[的WebMethod(EnableSession =真)]' – ps2goat
它可能是一個配置問題?也許與POST與GET的問題?當用戶登錄時,我們設置了一堆會話變量,並且它們保持得很好,但如果我在此處執行操作,則無法對會話進行更改。 –
什麼版本。網你正在與,只是這樣我可以更準確地測試這個? – ps2goat