在托管在 Azure 应用服务上的 ASP.NET MVC 网站上,我们希望对超过 15 秒的请求强制超时。这是我们一直在测试的一个简单的动作,它总是需要超过 15 秒(即无限循环)......
public ActionResult TimeoutTest()
{
var i = 1;
while (true)
{
i++;
}
return new HttpStatusCodeResult(200);
}
默认情况下,如果我在浏览器中对该操作执行 GET,我将在两分钟后收到“500 - 请求超时”错误,这与ApplicationHost.config 的 webLimits 部分中的“connectionTimeout”默认设置一致.
所以......除非我弄错了,否则将这个connectionTimeout值更改为15秒就足够了。为此,我了解需要对 ApplicationHost.config 文件 (XDT) 使用基于转换的方法,如此处所述。
我使用以下 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 秒。
我的问题:有人知道为什么这个超时设置没有得到尊重吗?
我知道这篇文章,看起来它采用了完全相同的方法(并且似乎有效?)。