Server.ScriptTimeout在范围内设置全局?

时间:2012-08-11 20:16:32

标签: asp.net

根据我的经验,无论是作为经典ASP还是ASP.NET开发者,我总是理解设置Server.ScriptTimeout值的调用是当前请求的本地范围。换句话说,调用Server.ScriptTimeout = 600会将当前请求的处理时间设置为10分钟。对其他资源的后续甚至并发请求将使用Server.ScriptTimeout的默认设置。

最近在代码审核中,我被告知将Server.ScriptTimeout设置为值会设置网站中每个页面的处理时间,直到应用程序池被回收。建议的“修复”类似于以下内容:

public class MyPage : Page {
  private const int desiredTimeout = 600;
  private int cachedTimeout;

  private void Page_Load(object sender, EventArgs e) {
    // cache the current timeout in a private store.
    cachedTimeout = Server.ScriptTimeout;
    Server.ScriptTimeout = desiredTimeout;
  }

  private void Page_Unload(object sender, EventArgs e) {
    // restore the previous setting for the timeout
    Server.ScriptTimeout = cachedTimeout;
  }
}

这对我来说似乎很奇怪,因为在页面中调用Server.ScriptTimeout = 1的开发人员可能会关闭该网站,因为每个其他页面只允许处理一秒钟。此外,此行为将影响当前Page_Load和Page_Unload事件之间可能发生的任何当前请求 - 这似乎是并发噩梦。

然而,为了彻底,我制作了一个由两页组成的测试工具 - Page One ,将Server.ScriptTimeout设置为一些非常高的数字和第二页只显示Server.ScriptTimeout的当前值。无论我在 Page One 上设置什么价值,第二页始终显示默认值。因此,我的测试似乎验证Server.ScriptTimeout是否属于本地范围。

我注意到如果我的web.config有debug =“true”,Server.ScriptTimeout没有效果 - 并且MSDN在其页面上明确说明了这一点。在这种模式下,无论我将其设置为什么,所有读取Server.ScriptTimeout值的调用都会返回一个荒谬的大数字。

所以我的问题是,并且绝对确定我没有遗漏某些内容,是否有设置Server.ScriptTimeout值的实例会影响整个网站的处理时间(全局范围),或者我认为效果只对当前上下文本地有效?我用谷歌搜索这个问题无济于事,MSDN似乎对这个问题保持沉默。

任何链接和/或体验 - 无论如何 - 将不胜感激!涉及此文件的文件似乎很少,我希望获得任何权威信息。

1 个答案:

答案 0 :(得分:10)

确实是特定于请求:

public int ScriptTimeout
{
    get
    {
        if (this._context != null)
        {
            return Convert.ToInt32(this._context.Timeout.TotalSeconds, CultureInfo.InvariantCulture);
        }
        return 110;
    }
    [AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Medium)]
    set
    {
        if (this._context == null)
        {
            throw new HttpException(SR.GetString("Server_not_available"));
        }
        if (value <= 0)
        {
            throw new ArgumentOutOfRangeException("value");
        }
        this._context.Timeout = new TimeSpan(0, 0, value);
    }
}

其中_contextHttpContext