- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我们托管在 Azure 应用服务上的 ASP.NET MVC 网站上,我们希望对耗时超过 15 秒的请求强制超时。这是一个我们一直在测试的简单操作,总是需要超过 15 秒(即无限循环)...
public ActionResult TimeoutTest()
{
var i = 1;
while (true)
{
i++;
}
return new HttpStatusCodeResult(200);
}
默认情况下,如果我在浏览器中对该操作执行 GET,两分钟后我将收到“500 - 请求超时”错误,这与 the "connectionTimeout" default setting in the webLimits section of ApplicationHost.config 一致。 .
所以...除非我弄错了,否则将这个connectionTimeout值更改为15秒就足够了。为此,我知道需要对 ApplicationHost.config 文件 (XDT) 使用基于转换的方法,如 here 中所述。 .
我使用以下 applicationHost.xdt 文件执行此操作...
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.applicationHost>
<webLimits xdt:Transform="SetAttributes(connectionTimeout)" connectionTimeout="00:00:15"/>
</system.applicationHost>
</configuration>
...之后我将文件添加到正确的位置(d:/home/site/applicationHost.xdt)。我重新启动了站点,并在日志中看到转换已成功应用:
2016-04-20T08:40:44 Start 'site' site extension transform
2016-04-20T08:40:44 StartSection Executing SetAttributes (transform line 4, 18)
2016-04-20T08:40:44 on /configuration/system.applicationHost/webLimits
2016-04-20T08:40:44 Applying to 'webLimits' element (no source line info)
2016-04-20T08:40:44 Set 'connectionTimeout' attribute
2016-04-20T08:40:44 Set 1 attributes
2016-04-20T08:40:44 EndSection Done executing SetAttributes
2016-04-20T08:40:44 Successful 'D:\home\site\applicationHost.xdt' site extension transform
2016-04-20T08:40:44 sandboxproc.exe complete successfully. Ellapsed = 316.00 ms
[编辑]:我还在转换后直接检查了applicationhost.config,新值就在那里:
...
</sites>
<webLimits connectionTimeout="00:00:15" />
</system.applicationHost>
<system.webServer>
<asp>
...
尽管如此,如果我再次点击上面的操作方法,它仍然会在两分钟而不是 15 秒后超时。
我的问题:有人知道为什么这个超时设置不被遵守吗?
我知道 this post ,看起来它采用了完全相同的方法(并且似乎有效?)。
最佳答案
通过 Web.Config 使用executionTimeout 怎么样?
<system.web>
<httpRuntime executionTimeout="30" />
<compilation debug="false" />
</system.web>
对于 MVC 项目,您应该添加以下代码以强制将值应用于请求:
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中调用的RegisterGlobalFilters方法中添加注册:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new Timeoutter());
filters.Add(new HandleErrorAttribute());
}
请参阅:
关于asp.net-mvc - Azure 应用服务在 ApplicationHost.config 中设置自定义 ConnectionTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36738638/
不同版本的 IIS 中 applicationhost.config 文件的确切文件路径是什么,例如:IIS 7、7.5、8、8.5 和 10? 最佳答案 对于自 IIS 7 以来的“大”IIS 版本
我们有一个托管在 Microsoft Azure 中的网络服务器。它是 Windows Server 2008 R2 数据中心版,64 位。 对于托管在这台机器上的网站,我需要对 applicatio
我正在尝试从 applicationHost 配置文件中删除 centralBinaryLogFile 元素: 我正在使用下面的方法来删除它: Remove-WebConfigurationProp
每当我尝试向 Azure 云项目添加角色时,我都会遇到此问题。 问题是,每当我更新到旧版本的代码时,它都能正常工作。直到我尝试添加新角色,甚至删除角色并读取它时,我才收到错误。即使在新项目中我也无法添
我在 C# ASP.NET WebAPI 项目中遇到一个奇怪的问题,其中 applicationhost.config 中的属性值未映射到程序集的完全限定名称;相反,它标记了 "(1)"最后。 因此
对于一个刚刚创建网站,以ASP.NET MVC5为例。 我们并没有在网页的配置文件(web.config)中配置一些处理程序或模块,如处理Session的SessionStateModule模块,
我正在尝试使用 Azure 网站设置反向代理,大致如下 this guide这解释了如何在这样的网站上修改 ApplicationHost.config - 但它对我不起作用。 我有这个 applic
我已经检查了 ServerManagaer 类,它提供了很多与 IIS 一起使用的功能,它还包含更新 applicationHost.config 文件中的值的方法,但我无法找到任何方法来解锁其中的部
我无法保存 applicationHost.config 文件,当我停止 IIS 服务并关闭 visual studio 时,它显示“保存失败,它正在另一个程序中打开”,知道吗? 最佳答案 如果您使用
我有一个使用表单例份验证的VS2012开发的MVC4应用程序。 [身份验证模式=“表格”] [形成loginUrl =“〜/Account/Login” timeout =“2880”/] [/验证]
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 1年前关闭。 Improve this qu
我正在将 c# webservice 应用程序部署到一台机器上:Windows 2008 R2、IIS 7.5、框架 4 但我在将它转换为应用程序时遇到此错误 “执行此操作时出错细节:文件名:\?c:
我正在将 c# webservice 应用程序部署到一台机器上:Windows 2008 R2、IIS 7.5、框架 4 但我在将它转换为应用程序时遇到此错误 “执行此操作时出错细节:文件名:\?c:
ASP.NET 站点使用 IIS 中的 ARR(应用程序请求路由)进行负载平衡。相应的URL重写规则放在applicationHost.config中。 有什么方法可以在新的配置文件中分离这条规则吗?
我有一个包含多个项目的 C# 解决方案,其中一个是由 IIS 运行的 Web 服务器。我设置了True在该项目的 csproj 文件中。 当我打开 Visual Studio 时,它会在 ~/Docu
我正在尝试使用 CreateApplicationHost 呈现 ASP 网页的内容。具体代码如下: public class LocalPageContentAppropriator { p
如何更改 Azure Web 应用程序中的 applicationHost.config?我尝试: using (ServerManager serverManager = new ServerMan
我们正在尝试重写给定“X-CF-ORIGIN” header 的“主机” header - 这在本地有效,但是,在应用程序服务中,所有日志记录都表明它已有效,但我们似乎没有看到效果。 我们预计会因不正
我已经安装了 Visual Studio 开发者社区版本来练习编码。当我尝试创建一个新的 web 项目时,我遇到了配置 IIS express 失败,无法读取配置文件的问题。我已经尝试了所有可能的解决
我在 Windows 10 下运行 IIS Express(不要与普通 IIS 混淆)。我的理解是设置存储在“My Documents\IISExpress\config\applicationhos
我是一名优秀的程序员,十分优秀!