System.Web.UI.PageでいくつかのWebMethodを使用していくつかのAjaxリクエストを処理していますが、セッションにオブジェクトを格納しようとしていますいくつかのAjaxリクエストにまたがって情報を保持することができます。共有メソッドのHttpContext.Current.Sessionが変更を永続的に変更しない
私はHttpContext.Current.Session("foo")
でセッションにアクセスしています。それがNothingであれば、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のの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 = true)] ' – ps2goat
設定上の問題ではありますか?おそらくPOSTとGETの問題ですか?ユーザーがログインすると、セッション変数が一式設定され、うまく機能しますが、ここでそれらを実行するとセッションに変更を加えることはできません。 –
のどのバージョン。ネットで作業しているので、もっと正確にテストできますか? – ps2goat