【问题标题】:ASP.NET Session difference InProc StateServerASP.NET Session 区别 InProc StateServer
【发布时间】:2014-04-25 21:03:54
【问题描述】:

[编辑] 真正的问题是为什么

when EnableSessionState="ReadOnly" 

    sessionState mode="InProc" is not really readonly
    but sessionState mode="StateServer" is

[/编辑]

我的 ASP.NET 应用程序中的会话存在问题。

目前,在网页上,我有一个按钮来进行搜索(并将其保存在会话中),搜索完成后我有另一个按钮来执行操作。 这个动作在 WebMethod 中调用,我显示一个 ajax 进度条。

当我开发此页面时,我必须将属性 EnableSessionState 设置为“ReadOnly”。

即使使用此 ReadOnly 参数,我也可以将搜索保存在会话中。

今天我想为我的会话使用 StateServer 模式,但现在,会话实际上处于 ReadOnly 模式。所以我无法获得搜索结果来启动第二个按钮的操作。

任何帮助将不胜感激

问候

【问题讨论】:

  • 为什么必须将属性EnableSessionState 设置为只读?
  • 对 ASP.NET 会话状态的访问是每个会话独占的,这意味着如果两个不同的用户发出并发请求,则同时授予对每个单独会话的访问权限。但是,如果对同一个会话发出两个并发请求(通过使用相同的 SessionID 值),则第一个请求将获得对会话信息的独占访问权。第二个请求仅在第一个请求完成后执行。 link

标签: c# asp.net session


【解决方案1】:

您可以在 web.config(system.web 部分)中删除只读设置并启用会话状态服务器:

<sessionState mode="StateServer" stateConnectionString="tcpip=server:port"></sessionState>

【讨论】:

  • 我已经在 web.config 中设置了会话状态。如果我删除只读,我的ajax进度条不动,http请求被阻止
【解决方案2】:

经过大量研究,我得出结论:

我将 EnableSessionState 设置为“只读”,但在 InProc 模式下我仍然可以修改会话(使用 StateServer,会话真的只读)
更多信息在这里:http://forums.asp.net/t/7504.aspx?Understanding+session+state+modes+FAQ

在 Asp.NET 中“如果对同一个会话发出两个并发请求(通过使用相同的 SessionID 值),第一个请求获得对会话信息的独占访问权。第二个请求仅在第一个请求完成后执行。 "
所以我不能在不设置 ReadOnly 参数的情况下一起启动 2 个 WebMethod(进度条和“业务操作”)流程 更多信息在这里:http://msdn.microsoft.com/en-us/library/ms178581.aspx

在我的情况下,我有一个问题,因为我将搜索结果存储在会话中,但现在使用 StateServer,我的会话变量是只读的,所以总是为空

我找到的解决方案是对这个网页使用缓存而不是会话(但我无法在这里详细解释我的所有解决方法)

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 2010-09-10
    • 2013-07-22
    • 1970-01-01
    • 2011-05-06
    • 2015-12-05
    相关资源
    最近更新 更多