ASP.NET超时问题

3

我正在处理一个遗留系统,其中web.config文件中包含以下超时值。

<sessionState timeout="120" />
...
<forms name="login" timeout="240" />

我还实现了以下内容以防止空会话变量问题。这是通用版本:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        Session("DocNum") = ""
    Else
        If Session("DocNum") Is Nothing Then
            Response.Redirect("~/index.aspx?e=SessionExpired")
        End If
    End If

End Sub

看起来,即使许多用户在系统上运行,会话变量在 120 分钟设置下被清除得很好。这似乎经常发生。

我读到应用程序池可能会导致这种情况,但是它是如何造成的呢?还有哪些其他配置和超时值可能会导致此问题?

感谢您的帮助。


你的会话状态设置为InProc了吗?如果是,应用程序池重置可能会导致这种情况发生。 - Zach Green
1个回答

3

如果您的会话状态设置为InProc,则应用程序池的回收设置可能会重置App Pool并清除会话。 "InProc"意味着会话存储在内存中,因此任何应用程序池重置都将丢失存储在会话中的内容。您可以检查Web服务器的系统事件日志,以查看是否存在由于定期回收计划或错误而导致应用程序池回收的任何事件。


默认的应用程序池空闲超时时间为20分钟。如果您希望会话持续时间超过此时间,您必须增加此值。http://www.iis.net/ConfigReference/system.applicationHost/applicationPools - pseudocoder
@pseudocoder,如果应用程序正在使用,空闲超时也会终止会话吗? - JSuar
如果你正在使用"InProc",那么是的。 - Zach Green
不是的,但如果应用程序池空闲超时未设置为等于或大于会话空闲超时的值,则会话空闲超时的行为是不可预测的。回收设置可能与您的问题有更直接的关系,如本答案中所述。请检查您的事件日志以获取应用程序池消息。 - pseudocoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接