Csharp/C#教程:.NET执行超时未在MVC Web项目中生效分享


.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

(0)
上一篇 2022年1月1日
下一篇 2022年1月1日

精彩推荐