自定义ASP.NET会话存储示例中“锁ID”的用途

时间:2014-12-01 07:27:26

标签: asp.net multithreading session concurrency locking

冒着揭露我无知的风险,我承认我对微软custom ASP.NET session store示例中的lock_idlocked列的目的感到困惑。我知道这个模式是为了在多线程环境和许多应用程序中使用而设计的,因此PK包含会话标识符和应用程序标识符是有意义的,允许应用程序重用会话标识符。没有意义的是lock_id似乎没有引用外键约束。

由于微软没有提供有关lock_id的性质和原因的大量信息,因此我认为这是显而易见的。直观地说,在特定时间指示会话是否由特定应用程序服务器处理是有用的,但我不知道这是如何物理转换为架构的。

任何澄清都表示赞赏。

1 个答案:

答案 0 :(得分:0)

FWIW,这个答案是等于猜测和知识的部分。

猜测:

数据库模式由名为SessionStateStoreProvider的类或其子类之一使用。特别是,它定义了一个名为:

的方法

GetItemExclusive

现在,我不确定它所采用的参数直接映射到模式中存储的列(我不是说它的外星人,但......)

知识:

关于它们的用途,答案在于你原来的问题:

  

我知道这个架构是为多线程中的消费而设计的   环境和许多应用程序

单个应用程序中,可能有多个线程提供相同的会话ID(请考虑是否有一个asp.net网站看到一个用户同时加载两个页面)。 .NET会话状态的默认行为是锁定其中一个页面的会话ID,并为其分配随机锁定ID。当该页面完成时,它将释放锁定,并且下一个线程将获取它并分配新的锁定ID。通常,这都将发生在内存中,但如果您将会话状态模型持久化到数据库,那么锁定ID也是有意义的。支持此行为的原因除了应用程序ID和会话ID之外还需要锁定ID。