ASP.Net SQL Server会话状态与持久会话状态

时间:2019-06-13 17:05:09

标签: asp.net sql-server session session-state

我正在研究和尝试一些有关将会话变量自动保存到SQL Server的事情。我发现此链接讨论了SQL Server session state(称为“选项1”)和此链接讨论了Persistent SQL Server session state(称为“选项2”)。

主要区别似乎是在使用选项1的情况下,如果关闭了运行SQL Server的计算机,则会话数据将丢失,这与保留它的选项2相反。在选项1中,似乎该进程使用了​​tempdb,而在选项2中,似乎通过使用ASPState数据库来持久化会话数据。

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

  1. 在第一个选项中,本文讨论了有关标记的Web配置中所需的配置。这不会添加到持久性案例中(选项2)。两种情况下的是否应该相同?

我尝试了第二种选择,因为这似乎更符合我的情况。我首先下载PersistSQLState.exe,该文件只是自解压InstallPersistSqlState.sql和UninstallPersistSqlState.sql脚本。我运行了InstallPersistSQLState.sql,该程序成功完成并在SQL Server中创建了“ ASPState”数据库。我使用选项2中所述的格式设置标签,如上文第1点所述。

运行该应用程序时出现以下错误:

  

“无法使用SQL Server,因为SQL Server上未安装ASP.NET 2.0会话状态,或者ASP.NET没有运行dbo.TempGetVersion存储过程的权限。如果ASP.NET会话状态尚未安装架构,请安装ASP.NET会话状态SQL Server 2.0版或更高版本;如果已安装架构,请向dbo.TempGetVersion存储过程授予执行权限,以授予ASP.NET应用程序池标识或在sqlConnectionString属性中指定的Sql Server用户。”

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

  1. 由InstallPersistSqlState.sql脚本创建的ASPState数据库中不存在存储过程dbo.TempGetVersion。此存储过程实际上与tempdb有关(非持久性),因此ASPState的模式为何不包含它?

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

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

任何帮助将不胜感激,因为有关该主题的文档似乎不多。

1 个答案:

答案 0 :(得分:1)

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

以下是我最终为实现持久会话状态所做的事情。希望它对希望实现相同功能的人有所帮助。

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

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

  3. 运行此命令:

    aspnet_regsql.exe -S“ SQLServerInstanceName” -U“用户名” -P“密码” -ssadd -sstype p

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

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

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

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