gpt4 book ai didi

c# - .NET 执行超时在 MVC Web 项目中不生效

转载 作者:太空狗 更新时间:2023-10-29 21:28:59 28 4
gpt4 key购买 nike

我们正在尝试设置超时,但请求并没有超时。我们尝试了几种设置方式:

通过将它放在 web.config 中(在应用程序的 web.config 和 views 文件夹中)

<httpRuntime executionTimeout="5" />

我们确保我们没有处于 Debug模式

<compilation debug="false" targetFramework="4.0">

我们甚至尝试在代码中设置脚本超时(即使它应该是同一件事)并添加一个 Thread.Sleep 3 分钟(以确保我们远远超过默认超时)并且此操作仍然有效不超时:

public ActionResult Index()
{
Server.ScriptTimeout = 5;
Thread.Sleep(60 * 1000 * 3);
return View();
}

它发生在多台机器上,我什至去创建一个全新的解决方案,仅对模板进行上述更改,以及一个全新的 IIS 网站应用程序池......仍然无法超时。

我们是否缺少一些简单的配置设置?这看起来应该很容易做到......

最佳答案

添加到最终解决方案:上面的链接有一种方法可以强制 MVC 遵守当前 HttpContext 的超时

System.Web.HttpContext.Current.GetType().GetField("_timeoutState", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue(System.Web.HttpContext.Current, 1);

因为我们希望它在每个请求上运行,所以我们为它创建了一个全局操作过滤器

public class Timeoutter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
System.Web.HttpContext.Current.GetType().GetField("_timeoutState", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue(System.Web.HttpContext.Current, 1);
base.OnActionExecuting(filterContext);
}
}

然后在应用程序的 global.asax 中注册它:

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new Timeoutter());
}

请记住,此解决方案仍然需要 web.config 中的上述 2 行

<httpRuntime executionTimeout="5" />
<compilation debug="false" targetFramework="4.0">

关于c# - .NET 执行超时在 MVC Web 项目中不生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11657381/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com