【问题标题】:asp.net session state mode "SQLServer"asp.net 会话状态模式“SQLServer”
【发布时间】:2022-03-10 19:29:15
【问题描述】:

“我的网站是实时的。这个问题与在实时服务器上配置会话超时有关,而不是在本地主机上。”

我遇到了会话过期太快的问题。仅在 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 用户。"

错误图片:

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

谢谢

【问题讨论】:

  • 您是否尝试为连接字符串中的用户 ID 授予 DbExecuter 角色权限
  • 不,我没有尝试过这样的事情。
  • @jackerj,您写道“我拥有服务器上 ASPState 表中所需的所有表”。首先,当您编写“ASPState 表”时,看起来您的意思是“ASPState db”。我对么?另一个问题是:您如何检查您在数据库中找到的那些表是否正是应该存在的?

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


【解决方案1】:

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

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

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

【讨论】:

  • 这在新安装的机器上对我有用。您也可以从 VS 命令提示符运行它
  • "aspnet_regsql.exe -W" 更容易配置。它会打开 gui。
【解决方案2】:

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

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

如果您要访问自定义服务器/数据库,您需要将程序运行为 跟随...

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

【讨论】:

  • 在尝试了 apsnet_regsql.exe 命令 args 的多种变体之后,这对我有用。其他人没有安装必要的存储过程
【解决方案3】:

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

【讨论】:

  • 其实我已经安装在本地服务器上,并在服务器上导出数据库。
  • 我不知道有什么方法可以直接安装在服务器数据库上
  • 照你说的做了。再次安装它,现在出现以下错误“无效的对象名称't​​empdb.dbo.ASPStateTempApplications'”你能告诉我什么吗?
  • 您将它安装在 temdb 中,而不是在您的常规数据库中?
  • 我遇到了完全相同的问题,问题是aspnet_regsql -W创建的55个存储过程列表中不存在上述存储过程
【解决方案4】:

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

一个正确的例子应该是:

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

【讨论】:

    【解决方案5】:

    我被困住了,没有一个答案对我有用,以防万一其他人有这个问题,这就是解决我的问题的方法,我在 cmd 中运行:

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

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

    【讨论】:

      猜你喜欢
      • 2012-03-18
      • 2013-02-19
      • 2013-05-03
      • 2010-11-29
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多