asp.net会话状态模式“SQLServer”

时间:2013-03-13 08:39:41

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

“我的网站是LIVE。此问题与LIVE服务器上的配置会话超时有关,而与localhost无关。”

我的会话太快过期了。仅在2-5分钟内链接。我尝试了很多东西,最后决定以“SQL Server”模式存储会话

在我的web.config文件中,我有以下编码:

<sessionState mode="SQLServer" cookieless="false" timeout="45"
sqlConnectionString="data source=xxx.xx.xx.xxx;uid=xxxxxxx;pwd=xxxxxxxx"/>

我拥有服务器上ASPState表所需的所有表。您可以从下图中看到它。

enter image description here

但是当我运行我的应用程序时,它会抛出以下错误:

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

错误图片:

enter image description here

我无法理解确切的问题以及如何解决它。任何帮助将不胜感激。

谢谢

5 个答案:

答案 0 :(得分:32)

为了让这个对我起作用,我使用以下选项运行命令。

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regsql.exe -S . -E -ssadd -sstype p

我相信-ssadd选项(&#34;添加对SQL Server模式会话状态的支持。&#34;)是导致它正确设置存储过程的原因。请参阅此link以获取选项列表。

答案 1 :(得分:5)

在树中打开“可编程性”并首先检查dbo.TempGetVersion是否存在。可能你没有安装正确的架构。

答案 2 :(得分:2)

也许你的web.config中有一个错误的标签

一个正确的例子应该是:

<sessionState 
allowCustomSqlDatabase="true" 
mode="SQLServer" 
sqlConnectionString="data source=localhost;initial catalog=YourAspStateDatabase;user id=yourLogin;password=yourpassword" cookieless="false" timeout="30"/>

答案 3 :(得分:2)

所有这些信息都是非常有价值的,但是根据您的情况,还有一些更有价值的注释。

如果您运行向导,则它不会与-ssadd标志一起运行。 -ssadd标志是创建dbo.TempGetVersion过程以及其他过程的原因。

如果您要转到自定义服务器/数据库,则需要以 跟随...

devDependencies
  • -S是您的服务器名称标志
  • -D是您的数据库名称标志
  • -ssadd添加对SQLServerm模式会话状态的支持。如果需要删除过程,请运行-ssremove。
  • -E使用当前的Windows凭据连接到目标数据库以进行设置。
  • -sstype c表示这是一个自定义数据库名称。

答案 4 :(得分:0)

我被困在这里,并没有任何答案对我有用,以防其他人有这个问题,这是解决了我的问题,我在cmd跑了:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regsql.exe -C "Data Source=.\SQL2012;Integrated Security=True" -ssadd

以防其他人遇到与我相同的情况。