代码之家  ›  专栏  ›  技术社区  ›  spender

带有SQL Server的ASP.NET会话状态服务器

  •  0
  • spender  · 技术社区  · 15 年前

    我们正在尝试使用以下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
    

    在Web服务器上,我们已经启动了ASP.NET状态服务,但是,在表aspstatetempapplications或aspstatetempsessions中没有显示任何记录,而且看起来会话仍然存储在进程中。

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

    IIS日志未显示任何失败提示。发生了什么?

    3 回复  |  直到 14 年前
        1
  •  4
  •   marcc    15 年前

    首先,不需要启动状态服务就可以使用SQL Server会话状态。忘记ASP.NET状态服务。

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

        2
  •  4
  •   Andomar    15 年前

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

    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 数据库。

        3
  •  0
  •   Larry Silverman    14 年前

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