我使用一些的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