根据我的所有经验,无论是作为经典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事件之间可能发生的任何当前请求-这似乎是并发噩梦。

但是,为了更全面,我制作了一个由两页组成的测试工具-第一个(将Server.ScriptTimeout设置为某个非常高的数字)和第二页,仅显示了Server.ScriptTimeout的当前值。无论我在第一页第二页上设置什么值,总是显示默认值。因此,我的测试似乎是为了验证Server.ScriptTimeout在作用域内是否是本地的。

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

因此,我的问题是,并且绝对要确保我没有丢失任何东西,是否存在一个实例,为Server.ScriptTimeout设置值会影响整个网站的处理时间(范围为全局),或者我认为这种效果是有效的吗?仅限于当前上下文?我已经用谷歌搜索了这个问题,但MSDN似乎对此问题保持沉默。

任何链接和/或经验-一种或另一种-将不胜感激!涵盖此方面的文档似乎很稀缺,我将不胜感激任何权威信息。

最佳答案

它确实是特定于请求的:

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

关于asp.net - Server.ScriptTimeout设置范围的全局?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11917317/

10-15 21:22