【发布时间】:2015-11-13 16:12:26
【问题描述】:
在out项目中,我们需要连续异步执行几个AJAX调用,所以下一个调用不必等待上一个返回。即使客户端异步发出调用,由于会话锁定,服务器也会按顺序处理它们。
由于我们不需要在这些调用中修改 Session,我们将 AJAX 调用的页面标记为 EnableSessionState="ReadOnly"via @Page 指令。它奏效了,调用变得真正异步,不再依赖于彼此的时间。但是我们发现 - 尽管被标记为只读,但在后端代码中 Session 是可写的。我们可以将值分配给 Session 并且这些值保持不变。这是设计的错误还是行为?
【问题讨论】:
-
您使用的是什么会话状态模式(InProc、StateServer、SQLServer、自定义)?
-
@MichaelLiu 基本 InProc。有关系吗?只读不应该总是意味着只读吗?
-
StateServer 和 SQLServer 可能会像您期望的那样工作,但是如果您使用 InProc,则您有责任确保会话标记为只读时不会更新。 InProc(与 StateServer 和 SQLServer 不同)不会为每个请求制作会话状态的副本,因此 ASP.NET 无法检测或阻止对对象的更改。
-
@MichaelLiu 说得通。您能否将其发布为答案,以便我接受?
标签: asp.net session concurrency webforms session-variables