所以,我有一个在 Azure 上运行的 Web 应用程序,并且有一个 API 端点可以处理一个很长的过程(我可以说大约一个小时)。在 Visual Studio 本地运行时没问题,但到 Azure 时,请求启动 55 秒后失败。
我在每个平台上都对这个问题进行了研究,我改变了在端点添加这行代码的机会。
System.Web.HttpContext.Current.Server.ScriptTimeout = 10000;
现在可以延长到超时,但在3分50秒后仍然无法处理。在这一点上,我发现还有一个叫做负载均衡器的东西。他们都说 Azure 负载均衡器将在 4 分钟后自动终止所有请求。所以我就坚持在这个地方了。
所以我尝试了所有这些解决方案。
1.System.Web.HttpContext.Current.Server.ScriptTimeout = 10000; 2.System.Net.ServicePointManager.SetTcpKeepAlive(true, 30000, 30000); 3.使用Start New Thread来处理长进程,并向客户端返回http状态码以表示进程已启动。 4.将长进程作为另一个异步函数
我想要实现的目标非常简单,一个长流程函数,可以通过调度程序任务或手动(AJAX 调用)触发。
有什么建议吗?
最佳答案
我认为您达到了 Azure Web Apps 的默认超时(如果我没记错的话,我认为是 3 分钟,但可能是错误的)。您可以从门户设置 SCM_COMMAND_IDLE_TIMEOUT - Web 应用程序设置 => 应用程序设置 => 添加具有所需值的设置(例如 360(以秒为单位))。 Reference 。 有一种功能会在外部操作超时时终止它们(信息位于上面的链接中)。
关于c# - Azure Web Apps 超时长处理请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37282625/