在ASP.NET 4.5.2的web.config中,我们将executionTimeout设置为小于默认超时值:
我已经通过使用System.Threading.Thread.Sleep(600000);测试了一个页面。而且我发现它在90秒后会适当超时。
在实际的应用程序中,我们使用Global.asax中的Application_EndRequest()来计时页面执行时间:
void Application_EndRequest()
{
double timeElapsed = DateTime.Now.Subtract(HttpContext.Current.Timestamp).TotalSeconds;
using (System.Data.SqlClient.SqlConnection cs = DB.LMSAdminConn())
{
cs.Open();
using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("EXEC logpageexecutiontime @pagename, @executiontime", cs))
{
cmd.Parameters.Add("@pagename", System.Data.SqlDbType.VarChar).Value = thisURL;
cmd.Parameters.Add("@executiontime", System.Data.SqlDbType.Float).Value = timeElapsed;
}
}
}
这似乎获得了准确的页面加载时间,但是有时它记录的页面加载时间远远超过脚本超时。在生产阶段,页面的突然加载时间将突然跳升至1000秒或更长。我们确实在某些页面上使用了更高的Server.ScriptTimeout,但在数据库中记录了高加载时间的页面上却没有使用。 Server.ScriptTimeout在作用域内是本地的,仅适用于当前请求。我仔细检查了一下,然后debug = false。
据我了解,在90秒的httpRuntime执行超时的情况下,任何页面的运行时间都不会超过90秒-它们将被终止。那么,为什么您认为我们看到记录的页面加载时间远远超过了executeTimeout值?