【问题标题】:ASP Session State OverviewASP 会话状态概述
【发布时间】:2014-08-24 05:43:34
【问题描述】:

我在一个经典的 ASP 网站上工作,该网站使用 ASP 会话状态来保存状态信息。我们使用 ASP 会话状态的 sql 数据库实现。

我们遇到了一些问题,即会话被锁定,然后对该会话的后续请求堆积到影响我们性能的大队列中。我不希望你能够为我解决这个问题,但也许有人可以给我一个会话状态的概述,因为我认为我并不完全理解它。

  • 我们的页面都没有被标记为只读,因此我们对会话数据库的所有请求都是独占的 (TempGetStateItemExclusive3);这反过来又锁定了会话。
  • 我了解,如果对会话进行了修改,我们会更新数据库中的会话 (TempUpdateStateItemShort),并且该过程的一部分会删除锁定。
  • 我也明白,如果我们放弃一个会话,锁会被 (TempRemoveStateItem) 删除。
  • 我还了解到,sql 代理作业会定期发生以删除过期会话。

我不明白我们如何放弃会话或如何释放通过 Get 锁定但未更新的会话的锁定?

我已阅读以下内容以了解http://msdn.microsoft.com/en-gb/library/aa478952.aspxhttp://msdn.microsoft.com/en-us/library/aa479041.aspx

我们将一如既往地欣然接受和感谢任何帮助。

【问题讨论】:

  • asp.net 还是经典的 asp?

标签: asp.net session-state


【解决方案1】:

我花了更多时间研究这个问题,我想我已经弄明白了。

  • 放弃会话是一个显式操作,Session.Abandon()

  • 释放锁是一种隐式操作

在 page_load 事件中调用 TempGetStateExclusive3 以获取会话对象。退出 page_load 会隐式调用 TempReleasStateItemExclusive。作为开发人员,您只能控制放弃会话,锁定由框架为您处理。

这并不能解决我的会话被锁定的问题。但至少现在我知道 sql server 会话状态应该如何工作了。

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多