3

我们有一个在网络场中运行的 ASP.Net 2.0 Web 应用程序,它使用 ASP.Net State 服务来存储会话。

我们一直在间歇性地遇到服务问题,并更改了一些内容,例如 machine.config 中的 machineKey。

我的实际问题是围绕状态服务服​​务的监控。我们在托管服务的服务器上运行了所有 4 个可用的性能计数器,但到目前为止我们还没有看到单个会话超时。我们还看到活跃会话的数量在一段时间内缓慢上升,但从未减少。

状态服务是否能识别会话何时超时?有什么我们应该手动做的吗?

编辑:我们已经放弃了状态服务并使用了 SQL 服务器会话。

为了回答下面的问题,似乎会​​话永远上升,直到服务崩溃,并且任何 oen 线程都链接到状态服务器是非常值得怀疑的。归根结底,这是一个相当基本的网络应用程序。

从我正在阅读的内容看来,其他许多人都经历过类似的事情,但是在任何飞来飞去的反应中似乎普遍缺乏常识和知识。

MS 似乎几乎没有关于这个主题的文档。

4

4 回答 4

1

在 ASP.Net 会话超时可以在 web.config 和 machine.config 中配置。假设没有任何变化,默认超时为 20 分钟。machine.config 文件可以设置为不允许覆盖,这意味着 web.config 文件中指定的任何更改都不会覆盖这些设置。

您是否确保机器和 Web 配置文件中都有适当的设置?

假设默认设置,状态服务应在 20 分钟不活动后丢弃每个会话。

您的非活动会话在什么时候被丢弃?我认为它们不会呈指数增长,除非您重新启动服务以清除它们,否则它们必须在某个时候被删除。

于 2009-02-12T11:30:27.337 回答
0

根据我的经验,我们发现本机状态服务器甚至使用 SQL Server 进行会话是一个非常可怕的场景,因为两者都有问题。

我认为您可以为此探索其他产品以达到绝对最佳效果。一个免费的选项是Velocity,但它仍然没有发布。
另一个全面但经过验证的产品将是(实际上非​​常昂贵)NCache

看看哪个最适合您。

关于 SQL Server,如果你有足够数量的点击进入,你的服务器很快就会死掉(我相信你已经有一些点击让你做 Web Farm 或者你只是为了冗余而这样做)

于 2009-04-02T05:12:04.927 回答
0

您是否有某些东西可能会在您不知情的情况下触发会话并使其保持活力?是否有线程正在生成一些在后台工作并坚持您的会话的线程?就我的经验而言,超时设置在他的 web 配置文件中,从那里开始并不是魔法。

于 2009-02-19T06:29:01.750 回答
0

我相信这会被修改,但我不得不说。

如果您在使用状态服务器时遇到问题,那么您的 Web 应用程序中的某处可能存在错误。查尔斯上面的评论似乎是开始检查的好地方,但在某个地方存在生命周期问题。

返回代码并检查您的假设。拿一台新电脑,访问你的网站(创建一个会话),让它静置一个小时。如果您的会话仍然存在,则说明有问题。创建一个新的 Web 应用程序,它只有一个页面来报告当前会话的年龄,然后尝试同样的事情。您应该会发现一个小时后(默认为 20 分钟)会话不再有效。现在您有一个按预期工作的系统和一个没有按预期工作的系统,两者都使用相同的会话服务器,因此您可以排除问题,现在开始检查代码/配置,看看您可以在哪里保持活动(或防止超时)。

顺便说一下,这里是一个“有效的”会话配置。如果您没有这样的外观,您可能已经发现了您的问题:

<sessionState 
   mode="StateServer" 
   stateConnectionString="tcpip=10.1.1.1:55455" 
   cookieless="false" 
   timeout="20" />

还要确保你没有用你的 machine.config 覆盖你的 web.config 以获得更长的超时时间。

于 2009-04-02T17:26:44.750 回答