gpt4 book ai didi

vb.net - Shared 方法中的 HttpContext.Current.Session 没有持久化更改

转载 作者:行者123 更新时间:2023-12-04 15:40:54 24 4
gpt4 key购买 nike

我在 System.Web.UI.Page 中使用一些 WebMethods 来处理一些 ajax 请求,并且我试图在 session 中存储一个对象以保留多个 ajax 请求中的信息,甚至在离开页面并返回之后。

我正在通过 HttpContext.Current.Session("foo") 访问 session ,如果没有,我通过 HttpContext.Current.Session("foo") = New Bar() 设置它.

我遇到的问题是,在设置后,下次我点击该方法时,它已被重置。我尝试更改在别处设置的其他一些 session 变量,它们也被恢复了。这告诉我我正在获取 session 状态的副本,而不是我可以更新并导致从请求到请求持续存在的引用。我仔细检查了 EnableSession WebMethod 的属性为 True,但仍不保留对 session 状态的更改。

方法声明:

<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

获取 session 工具:
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

如何让我的更改应用于持久 session 状态,从共享 WebMethod 访问它?

编辑:发现我的问题,一个星期太晚了。 .aspx 的第 1 行:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="foo.aspx.vb" 
Inherits="foo" MaintainScrollPositionOnPostback="true"
MasterPageFile="~/mstrFoot.master" EnableSessionState="ReadOnly" %>

该页面被设置为具有只读 session ,它会覆盖 PageMethod 的 EnableSession 设置。 [面掌]

最佳答案

默认情况下,IIS 将利用多核 CPU。在多处理器环境中,web.config 中的默认 InProc SessionState 设置随机处理不同线程(每个处理器/核心的单独线程)上的请求。更多详情:https://msdn.microsoft.com/en-us/library/ms998549.aspx#scalenetchapt06_topic8

仅供引用,虽然我过去自己也这样做过,但不赞成在对 Web API (SOAP/REST) 的请求之间维护 session 状态,因为它代表了难以扩展的服务器开销。在 session 状态中存储复杂对象还需要该对象/属性/字段的每个方面都可以序列化,这会变得非常棘手。那说...

根据您提供的信息,您需要设置您的 Web 应用程序以使用 StateServer 模式并在某些机器上启用 ASP.NET 状态服务,以便由不同线程处理的多个请求将跨 CPU 维护 session 。 https://msdn.microsoft.com/en-us/library/ms178586.aspx

关于vb.net - Shared 方法中的 HttpContext.Current.Session 没有持久化更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41046446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com