Я использую некоторые 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?
Редактировать: нашел мою проблему, неделю слишком поздно. Линия 1 из .aspx:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="foo.aspx.vb"
Inherits="foo" MaintainScrollPositionOnPostback="true"
MasterPageFile="~/mstrFoot.master" EnableSessionState="ReadOnly" %>
страница была создана, чтобы иметь только для чтения сеанса, который переопределяет параметр EnableSession в PageMethod в. [facepalm]
Вы также можете опубликовать объявление функции? похоже, что он должен работать, если вы добавите правильный атрибут: http://stackoverflow.com/questions/4758575/how-can-i-access-session-in-a-webmethod '[WebMethod (EnableSession = true)]' – ps2goat
Это может быть проблема конфигурации? Может быть, проблема с POST vs GET? Когда пользователи регистрируются, мы устанавливаем кучу переменных сеанса, и они сохраняются просто отлично, но я не могу получить изменения в сеансе, чтобы сохранить, если я их сделаю здесь. –
какие версии.net вы работаете, так что я могу более точно проверить это? – ps2goat