【问题标题】:Asp.net session state server with SQL Server带有 SQL Server 的 Asp.net 会话状态服务器
【发布时间】:2010-12-21 06:54:11
【问题描述】:

我们正在尝试使用以下 web.config 行使会话状态正常工作:

<sessionState 
    mode="SQLServer" 
    stateConnectionString="tcpip=127.0.0.1:42424" 
    sqlConnectionString="Data Source=dbServer;User ID=stateUser;Password='thepassword'" 
    cookieless="false" 
    timeout="20"/>

在 dbServer 上,我们运行以下命令来设置 ASPState db:

aspnet_regsql.exe -S localhost-E -ssadd -sstype p

在 webServer 上,我们已经启动了 ASP.Net 状态服务,但是在 ASPStateTempApplications 或 ASPStateTempSessions 表中没有显示任何记录,看起来很像 session 仍在进程中存储。

怎么了?状态服务是否应该在数据库服务器上运行?它是否与 IIS 一起安装,因为它在该计算机上不可用,尽管安装了 .net 3.5.1。

IIS 日志没有显示失败的提示。怎么了?

【问题讨论】:

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


    【解决方案1】:

    如果密码周围确实有引号,请尝试删除它们:

    sqlConnectionString="Data Source=dbServer;User ID=stateUser;Password=thepassword"
    

    并删除以下行,它没有SQL会话存储的功能:

    stateConnectionString="tcpip=127.0.0.1:42424" 
    

    你还不如停止状态服务;进程外会话状态需要它,而不是 SQL Server 会话状态。

    此外,SQL Server 会话状态要求您在数据库上运行 InstallSqlState.sql,而不是 aspnet_regsql.exe。它应该创建一个新的ASPState 数据库。

    【讨论】:

    • 我同意这个答案,除了最后一行。 不要尝试手动运行InstallSqlState.sql;它被设计为由 aspnet_regsql.exe 运行;甚至文件顶部的 cmets 也说了同样的话。
    • +1 表示不需要状态服务。请参阅 marcc 帖子下的 cmets 了解我的愚蠢!
    • @RickNZ 嗯,我是“手动”运行的,效果很好。 :shrug: (在我已经运行/EXECd 脚本之前,我什至没有看到告诉我运行 EXE 的页面。)
    【解决方案2】:

    首先,您无需启动状态服务即可使用 SQL Server 会话状态。忘记 ASP.NET 状态服务。

    您确定您的网站正在创建会话变量吗?正因为您将这些更改放在您的 web.config 中,如果您从不使用会话变量,它将不会被使用。

    【讨论】:

    • 宾果游戏。我的印象是会话状态也负责维护表单身份验证(我在平衡器下运行一些服务器)。会话状态确实被保存(只是在我正在测试的页面上未使用)。我真正需要做的是设置相同的 machineKey 密钥以保留身份验证,因为用户在我的农场节点之间分流。一个严重的 RTFM 案例。
    【解决方案3】:

    写一个小的 HttpModule 怎么样?当您需要将用户转换到新代码库时,您可以将其放置到位。该模块可以对每个页面请求做一些工作来检查用户的会话并决定是否需要放弃它。也许您在首次创建会话时将应用程序版本字符串存储在用户会话中,并将当前应用程序版本字符串与之进行比较。

    【讨论】:

      猜你喜欢
      • 2019-10-28
      • 2014-09-17
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 2012-12-11
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多