根据我的所有经验,无论是作为经典 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 似乎对这个问题保持沉默。
任何链接和/或经验 - 一种或另一种方式 - 将不胜感激!涵盖这方面的文档似乎很少,我将不胜感激任何权威信息。