我们在Web场中运行ASP.Net 2.0 Web应用程序,该Web场使用ASP.Net State服务来存储会话。
我们间歇性地使用该服务并更改了一些内容,例如machine.config中的machineKey。
我的实际问题是监控州服务。我们在托管服务的服务器上运行了所有4个可用的性能计数器,但我们还没有看到单个会话超时。我们还看到活跃会话的数量在一段时间内缓慢上升,但从未变得更少。
状态服务是否识别会话何时超时?我们应该手动做些什么吗?
编辑:我们已经放弃了状态服务并继续使用SQL服务器会话。
要回答下面的问题,似乎会话一直持续到服务崩溃为止,并且任何一个线程都链接到状态服务器是非常值得怀疑的。这是一个相当基本的网络应用程序在一天结束。
从我正在阅读的看来,似乎有许多其他人经历过类似的事情,但似乎在任何反应中都普遍缺乏常识和知识。
MS似乎几乎没有关于这个主题的文档。答案 0 :(得分:1)
在ASP.Net会话中,可以在web.config和machine.config中配置超时。假设没有任何改变的默认超时时间为20分钟。 machine.config文件可以设置为不允许覆盖,这意味着web.config文件中指定的任何更改都不会覆盖这些设置。
您是否确保在机器和Web配置文件中都有适当的设置?
假设默认设置,状态服务应在20分钟不活动后丢弃每个会话。
您的非活动会话在什么时候掉线?我认为它们不会呈指数级增长,除非您重新启动服务以清除它们,否则必须在某些时候删除它们。
答案 1 :(得分:0)
你有什么东西可能会在你不知道的情况下击中会话并让它保持活力吗?是否有某些线程正在生成一些正在做背景的工作并坚持你的会话?据我所知,超时是在web配置文件中设置的,它不是那里的魔法。
答案 2 :(得分:0)
根据我的经验,我们发现原生状态服务器甚至使用SQL Server进行会话是一个非常可怕的情况,因为两者都存在问题。
我认为您可以探索其他产品,以达到最佳效果。 免费选项为Velocity,但仍未发布 另一个全面但经过验证的产品将是(实际上非常昂贵)NCache
看看哪个最适合你。
关于SQL Server,如果你有足够多的点击量,你的服务器很快就会死掉(我相信你已经有一些点击让你做了Web Farm,或者你只是为了冗余而这样做)
答案 3 :(得分:0)
我相信这会受到限制,但我必须说出来。
如果您遇到状态服务器问题,那么您的Web应用程序中可能存在错误。查尔斯上面的评论似乎是开始检查的好地方,但某处存在生命周期问题。
返回代码并检查您的假设。拿一台新电脑,访问你的网站(创建一个会话),让它坐一个小时。如果你的会话还活着,那就错了。创建一个新的Web应用程序,只有一个页面报告当前会话的年龄并尝试相同的事情。您应该发现一小时后(默认为20分钟)会话不再有效。现在你有一个按预期运行的系统和一个不使用同一个会话服务器的系统,所以你可以将问题排除在外,现在开始通过代码/配置,看看你可以保持活着的位置(或防止超时)。
顺便说一下,这是一个'有效'的会话配置。如果你没有看到这样的东西,你很可能找到了你的问题:
<sessionState
mode="StateServer"
stateConnectionString="tcpip=10.1.1.1:55455"
cookieless="false"
timeout="20" />
另外请确保您没有使用machine.config覆盖web.config以延长超时时间。