【发布时间】:2016-12-05 00:38:50
【问题描述】:
我已将 ASP .net MVC Web 应用程序部署到 Azure 应用程序服务。
我从我的站点向某个从 DB(DbContext) 获取数据的控制器方法发出 GET 请求。有时从 DB 获取数据的过程可能需要 4 分钟以上。这意味着我的请求在 4 分钟内没有任何操作。之后 Azure 终止连接 - 我收到消息:
500 - 请求超时。
Web 服务器失败 在规定时间内回复。
这是一个方法示例:
[HttpGet]
public async Task<JsonResult> LongGet(string testString)
{
var task = Task.Delay(360000);
await task;
return Json("Woke", JsonRequestBehavior.AllowGet);
}
我见过很多这样的问题,但我没有得到答案:
Not working 1 不能提供其他链接 - 声誉太低。
我已阅读此article - 它关于 Azure 负载均衡器,它不适用于 webapps,但它写道,在 Azure webapp 中处理我的问题的常用方法是使用 TCP Keep-alive。所以我改变了我的方法:
[HttpGet]
public async Task<JsonResult> LongPost(string testString)
{
ServicePointManager.SetTcpKeepAlive(true, 1000, 5000);
ServicePointManager.MaxServicePointIdleTime = 400000;
ServicePointManager.FindServicePoint(Request.Url).MaxIdleTime = 4000000;
var task = Task.Delay(360000);
await task;
return Json("Woke", JsonRequestBehavior.AllowGet);
}
但仍然得到同样的错误。 我正在使用简单的 GET 请求,例如
GET /Home/LongPost?testString="abc" HTTP/1.1
Host: longgetrequest.azurewebsites.net
Cache-Control: no-cache
Postman-Token: bde0d996-8cf3-2b3f-20cd-d704016b29c6
所以我正在寻找我做错了什么以及如何在 Azure Web 应用程序中增加请求超时时间的答案。任何帮助表示赞赏。
门户上的 Azure 设置:
Web 套接字 - 开启
始终开启 - 开启
应用设置:
SCM_COMMAND_IDLE_TIMEOUT = 3600
WEBSITE_NODE_DEFAULT_VERSION = 4.2.3
【问题讨论】:
标签: c# asp.net-mvc azure