我正在研究和尝试一些有关将会话变量自动保存到SQL Server的事情。我发现此链接讨论了SQL Server session state(称为“选项1”)和此链接讨论了Persistent SQL Server session state(称为“选项2”)。
主要区别似乎是在使用选项1的情况下,如果关闭了运行SQL Server的计算机,则会话数据将丢失,这与保留它的选项2相反。在选项1中,似乎该进程使用了tempdb,而在选项2中,似乎通过使用ASPState数据库来持久化会话数据。
我有几个问题,似乎找不到任何答案:
我尝试了第二种选择,因为这似乎更符合我的情况。我首先下载PersistSQLState.exe,该文件只是自解压InstallPersistSqlState.sql和UninstallPersistSqlState.sql脚本。我运行了InstallPersistSQLState.sql,该程序成功完成并在SQL Server中创建了“ ASPState”数据库。我使用选项2中所述的格式设置
运行该应用程序时出现以下错误:
“无法使用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存储过程(出于各种原因)。
由InstallPersistSqlState.sql脚本创建的ASPState数据库中不存在存储过程dbo.TempGetVersion。此存储过程实际上与tempdb有关(非持久性),因此ASPState的模式为何不包含它?
这是需要安装的Asp.Net Version 2.0 Session state吗?如果是这样,应遵循什么流程?运行InstallPersistSQLState.sql脚本后是否应该将其安装在ASPState数据库中?如果没有,应该怎么做?选项1或选项2与该“ .exe”没有任何关系!
最后,我还尝试了卸载持久性案例,而是运行与选项1(非持久性)相关的脚本。在这种情况下,上面第一个链接中提供的脚本似乎无效。返回2个错误,找不到工作?!任何人都知道为什么会发生这种情况,并且某些在线位置是否存在正确的脚本?!
任何帮助将不胜感激,因为有关该主题的文档似乎不多。
答案 0 :(得分:1)
我的问题中列出的选项1和选项2文章具有误导性,这就是为什么我最终浪费了一整天试图使其使用错误信息的原因:我只是手头没有正确的文章!
以下是我最终为实现持久会话状态所做的事情。希望它对希望实现相同功能的人有所帮助。
将目录更改为.Net framework文件夹:
cd C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319
运行此命令:
aspnet_regsql.exe -S“ SQLServerInstanceName” -U“用户名” -P“密码” -ssadd -sstype p
上面第2点中的命令的小解释。
sstype定义会话状态的类型。 p是持久的。
有关完整信息,请访问此article并参考SQL Server模式。