ASP.Net SQL 服务器会话状态与持久会话状态

ASP.Net SQL Server Session State vs Persistent Session state

我正在研究和尝试一些关于将会话变量自动保存到 SQL 服务器的事情。我发现这个 link 讨论 SQL Server session state (call it 'Option 1') and this link discussing Persistent SQL Server session state(称之为 'Option 2')。

主要区别似乎是选项 1,如果机器 运行ning SQL 服务器关闭,会话数据将丢失,这与选项 2 相反,选项 2 会保留它。在选项 1 中,该进程似乎使用了 tempdb,而选项 2 似乎通过使用 ASPState 数据库来保留会话数据。

我有几个问题似乎找不到任何答案:

  1. 在第一个选项中,文章讨论了关于 标记的web config 中所需的配置。这不会添加到持久性案例(选项 2)中。两种情况下 < sessionState > 应该相同吗?

我已经尝试了第二个选项,因为它似乎更符合我的案例场景。我首先下载 PersistSQLState.exe,它只是自解压 InstallPersistSqlState.sql 和 UninstallPersistSqlState.sql 脚本。我 运行 InstallPersistSQLState.sql 成功完成并在 SQL 服务器中创建了 'ASPState' 数据库。我使用上面第 1) 点中讨论的选项 2 中所述的格式设置 < sessionState > 标记。

在 运行 启动应用程序后,我收到以下错误:

"Unable to use SQL Server because either ASP.NET version 2.0 Session State is not installed on the SQL server, or ASP.NET does not have permission to run the dbo.TempGetVersion stored procedure. If the ASP.NET Session State schema has not been installed, please install ASP.NET Session State SQL Server version 2.0 or above. If the schema has been installed, please grant execute permission on the dbo.TempGetVersion stored procedure to either the ASP.NET application pool identity, or the Sql Server user specified in the sqlConnectionString attribute."

这概述了两件事:Asp.Net 版本 2.0 会话状态可能尚未安装,并且进程无法 运行 dbo.TempGetVersion 存储过程(出于各种原因) .

  1. dbo.TempGetVersion 脚本创建的 ASPState 数据库中不存在存储过程 dbo.TempGetVersion。此存储过程是否实际上与 tempdb(非持久)相关,因此为什么 ASPState 的架构不包含它?

  2. 这是需要安装的Asp.Net Version 2.0 Session state吗?如果是这样,要遵循什么过程?!是否应该在 运行 执行 InstallPersistSQLState.sql 脚本后将其安装在 ASPState 数据库中?如果不是,具体应该怎么做?选项1或选项2中都没有与此“.exe”相关的内容!

  3. 最后,我还尝试卸载持久性案例而不是 运行 与选项 1(非持久性)相关的脚本。在这种情况下,上面第一个 link 中提供的脚本似乎不起作用;返回 2 个错误,找不到工作?!。任何人都知道为什么会发生这种情况,正确的脚本是否存在于某种在线位置?!

任何帮助将不胜感激,因为关于这个主题的文档似乎很差。

我的问题中列出的选项 1 和选项 2 文章具有误导性,这就是为什么我最终浪费了一整天试图使其与错误信息一起工作:我手头没有正确的文章!

以下是我最终为实现持久会话状态所做的工作。希望它能对任何想实现同样事情的人有所帮助。

  1. 在机器上以管理员模式打开CMD。
  2. 将目录更改为 .Net framework 文件夹:

    cd C:\Windows\Microsoft.NET\Framework\v4.0.30319

  3. 运行 这个命令:

    aspnet_regsql.exe -S "SQLServerInstanceName" -U "Username" -P "Password" -ssadd -sstype p

上面第2点的命令的小解释。

  • Aspnet_regsql.exe - 是在机器上安装 Asp.Net 会话状态的 .exe。
  • -S定义SQL服务器实例名
  • -U定义用户名-
  • -P定义密码
  • ssadd 定义为会话状态创建新数据库
  • sstype 定义会话状态的类型。 p 是持久的。

    1. 最后,在要实现持久会话状态的Asp.Net应用程序的web.config中,将标记更改为如下所示:

    < sessionState mode="SQLServer" sqlConnectionString="data source=127.0.0.1\sqltest;User ID=*****;Password=******" cookieless="false" timeout="20"/>

有关完整信息,请访问此 article 并参考 SQL 服务器模式。