.NET执行超时未在MVC Web项目中生效
我们正在尝试设置超时,并且请求不会超时。 我们尝试过以下几种方式:
将它放在web.config中(在应用程序的web.config中,以及views文件夹中的那个)
我们确保我们没有处于调试模式
我们甚至尝试在代码中设置脚本超时(即使它应该是相同的东西)并添加一个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);
因为我们希望它在每个请求上运行,所以我们为它创建了一个全局动作filter
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行
上述就是C#学习教程:.NET执行超时未在MVC Web项目中生效分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1017169.html