根据this how-to,我已经在XP-SP3开发人员框中为SQL Server 2008 Express成功配置了IIS,以保存ASP.NET会话状态信息。我之所以使用SQL Server,是因为否则在每次重新编译时,我都会丢失令人讨厌的会话状态(必须重新登录)。但是,我面临一个烦人的问题,因为每次我重新启动SQL时都会出现此错误,有时还会有一个或两个其他非常相似的朋友:
The SELECT permission was denied on the object 'ASPStateTempSessions',
database 'tempdb', schema 'dbo'.
[要解决该错误,我只是打开Management Studio并为我在ASPState db上使用的登录名/ dbo编辑用户映射,然后将tempdb
重新添加到具有除拒绝权限之外的所有权限的用户。显然,一旦有了正确的权限,ASP.NET便能够自动创建其使用的表。在没有正确的安全保护之前,它无法运行CreateTempTables
程序。
问题...有没有一种方法不必在每次重新启动SQL Server时都重新执行此操作?
我现在并不真正关心在重新启动之间保持临时数据,但是我不想经过此手动步骤只是为了让我的Web应用程序在本地主机上工作,该主机始终使用会话状态变量。我想人们可以在SQL Server中使用某种存储过程来在服务启动时完成本机的任务,而不必手动进行。我会接受这样的答案作为快速解决方案。但是,我还假设存在更好的推荐配置或其他配置。在操作指南或StackOverflow的此处其他地方都找不到答案。
两个答案似乎都是正确的;但是大多数情况下,Microsoft都在设置中...
首先使用命令卸载ASPState数据库:
aspnet_regsql –ssremove –E -S。
注意:
-E表示您要使用集成安全性连接。
-S通知要使用的SQL Server和SQL实例,以及“。 (点)指定默认本地实例
然后使用命令重新安装:
aspnet_regsql –ssadd –sstype p –E -S。
注意:
sstype具有三个选项,t | p | c ...第一个“ t”,告诉安装程序将所有存储过程托管在ASPState数据库中,并将所有数据托管在tempdb中。第二个选项“ p”告诉安装程序将数据持久保存到ASPState数据库。最后一个选项“ c”使您可以指定其他“自定义”数据库来保留会话状态数据。
如果使用“ -sstype p”重新安装,则只需为建立连接的用户(在大多数情况下,是IIS中应用程序池的标识)提供数据读取器/数据写入器到ASPState数据库。
持久保存数据的另一个好处是,即使重新启动服务,会话状态也会保留。唯一的缺点是您需要确保代理清理作业定期修剪旧会话(默认情况下,它每分钟都会执行一次)。
重要:
如果正在运行群集,则必须保留会话数据。您唯一的选择是使用sstype'p'或'c'。
希望这可以阐明问题!
为了记录,我做了find a way to do this。
为找到最奇怪的方法而做得很好。
我也有这个问题