C# Azure Web应用程序超时长进程请求
所以,我有一个在Azure上运行的web应用程序,还有一个API端点,它将处理一个很长的过程(我可以说大约一个小时)。在VisualStudio上运行本地时是可以的,但当它转到azure时,在请求启动55秒后失败 我在每一个平台上都有关于这个问题的研究,我改变了一个机会,在这行代码的末尾添加C# Azure Web应用程序超时长进程请求,c#,ajax,asp.net-mvc,azure,web-applications,C#,Ajax,Asp.net Mvc,Azure,Web Applications,所以,我有一个在Azure上运行的web应用程序,还有一个API端点,它将处理一个很长的过程(我可以说大约一个小时)。在VisualStudio上运行本地时是可以的,但当它转到azure时,在请求启动55秒后失败 我在每一个平台上都有关于这个问题的研究,我改变了一个机会,在这行代码的末尾添加 System.Web.HttpContext.Current.Server.ScriptTimeout = 10000; 所以现在它可以扩展到超时,但3分50秒后仍然无法处理。在这一点上,我发现还有另一个
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.使用启动新线程来处理长进程,并将http状态代码返回给启动进程的客户端初始值。
4.将长进程作为另一个异步函数
我试图实现的是一个非常简单的长过程函数,它可以由调度器任务触发,也可以手动触发(AJAX调用)
有什么建议吗?我想你达到了Azure Web应用程序的默认超时时间(如果我没记错的话,我想是3分钟,但可能是错的)。您能否从门户设置SCM_命令\u空闲\u超时-web应用程序设置=>应用程序设置=>添加具有所需值的设置(例如360(秒))。
有一种功能会在外部操作超时时终止它们(信息在上面的链接中)。虽然我没有回答您的大多数问题,但我选择表达一种观点,即您的“3.”选项,即立即将成功状态返回到AJAX客户机是您解决问题的第一步 实现TCP/IP/HTTP通信的网络基础设施不支持比典型web请求空闲时间长的连接。这些行为通常在应用程序(层)之外——在较低的基础架构层。您可能有权也可能没有权访问这些,如果您有权,您可以“修复”您的问题
使用选项3。从您的问题来看,结合轮询或某种形式的推送通知是您更好的解决方案。因此,这就是我在这个过程中的解决方法 如果这是一个长期运行的过程,它将在web作业上处理,我已经在visual studio 2015上使用Azure webjob SDK将整个过程重写为webjob 此外,为了加快整个过程(只是为了节省azure credit的成本),我直接使用了DatabaseContext,并使每个必需的表都以匿名类型在ToList()上运行。最后,我得到一个需要插入的项目列表,并使用BulkInsert 所有操作都在3分钟内完成,Azure运行时有70k个条目 //最新实施的更新 我仍在使用WebJob进行一些后台处理,但我通过使用
EntityFramework BulkInsert
,以及用于逻辑处理的Parallel.ForEach()
,加快了处理速度。
此外,在处理批量更新时,我还使用Parallel.ForEach()和一起使用(var context=new DatabaseContext()){…}
。(还有bulk.update库也提供了很好的解决方案)
此外,我确实尝试了Azure.Functions,它们似乎取代了Auzre.WebJob。通过使用相同的队列触发器,它比WebJob更快
对于所有的后台进程,Azure为您提供的解决方案很少,请分享,以防有人需要
- 网络作业
- 功能
- 逻辑应用程序