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

“asp.net会话状态模式”;SQLServer";,asp.net,sql-server,session,session-state,session-timeout,Asp.net,Sql Server,Session,Session State,Session Timeout,“我的网站处于活动状态。此问题与在活动服务器上而不是本地主机上配置会话超时有关。” 我遇到会话过早过期的问题。链接只需2-5分钟。我尝试了很多方法,最后决定以“SQL Server”模式存储会话 在我的web.config文件中,我有以下代码: <sessionState mode="SQLServer" cookieless="false" timeout="45" sqlConnectionString="data source=xxx.xx.xx.xxx;uid=xxxxxxx;pw

“我的网站处于活动状态。此问题与在活动服务器上而不是本地主机上配置会话超时有关。”

我遇到会话过早过期的问题。链接只需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表中所需的所有表。你可以从下图中看到它

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

无法使用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用户。“

错误图像:

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


谢谢您

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

可能您的web.config中有一个错误的标记

一个正确的例子应该是:

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

为了让它对我起作用,我使用以下选项运行了该命令

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

我相信
-ssadd
选项(“添加对SQL Server模式会话状态的支持”)是什么导致它正确设置了存储过程。请参阅此以获取完整的选项列表。

我被这个问题困住了,没有一个答案对我有效,只是为了防止其他人遇到这个问题,这就是解决我问题的原因,我在cmd中运行:

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

以防其他人陷入和我一样的困境。

所有这些信息都非常有价值,但根据您的情况,还有一些更重要的提示

如果运行向导,它不会使用-ssadd标志运行。创建dbo.TempGetVersion过程和其他过程的是-ssadd标志

如果您要访问自定义服务器/数据库,则需要按以下方式运行程序: 跟着

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

您是否尝试为您连接字符串中的用户id授予DbExecuter角色权限?否,我没有尝试过类似的操作。@jackerj,您写道“我拥有服务器上ASPState表中所需的所有表”。首先,您在写“ASPState表”时的意思是“ASPState db””“我说得对吗?另一个问题是:您如何检查在数据库中找到的表是否与应该存在的表完全一致?事实上,我已将其安装在本地服务器上,并将数据库导出到服务器上。我不知道直接将其安装到服务器数据库上的任何方法按照您所说的做了。我再次安装了它,现在出现以下错误“无效的对象名'tempdb.dbo.ASPStateTempApplications'”。您能告诉我有关它的任何信息吗?您是在temdb中安装的,可能不是在常规数据库中安装的?我遇到了完全相同的问题,由于上述存储过程在由
aspnet_regsql-W
创建的55个存储过程列表中不存在,因此我在新安装的机器上成功地解决了这个问题。您可以从VS命令提示符运行此命令,“aspnet_regsql.exe-W”更易于配置。它打开了gui。在尝试了apsnet_regsql.exe命令args的许多变体之后,这是一个适合我的。其他人没有安装必要的存储过程