根据我的所有经验,无论是作为经典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);
}
}
其中
_context
是HttpContext关于asp.net - Server.ScriptTimeout设置范围的全局?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11917317/