与'ASPStateTempSessions'相关的tempdb错误自动修复

问题描述 投票:6回答:4

根据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的此处其他地方都找不到答案。

asp.net iis sql-server-express
4个回答
13
投票

两个答案似乎都是正确的;但是大多数情况下,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'。

希望这可以阐明问题!


2
投票

为了记录,我做了find a way to do this


1
投票

为找到最奇怪的方法而做得很好。


0
投票

我也有这个问题

© www.soinside.com 2019 - 2024. All rights reserved.