.Net Core api长时间运行请求



我有一个web应用程序,调用.Net Core API来生成PDF文档。我正在做一堆HTML到pdf的转换,所以需要一段时间才能完成200页的文档。我让它在我的本地工作,但不是我的AppService。一开始,如果我浏览了100多页(小页面集可以工作(,我会得到"指定的CGI应用程序遇到错误,服务器终止了进程"。

调用我的api的代码:

var httpClient = new HttpClient();
HttpContent content = new StringContent(JsonConvert.SerializeObject(pdfRecipeDto), Encoding.UTF8, "application/json");
httpClient.Timeout = System.TimeSpan.FromMinutes(30);
var pdfFileUrl = httpClient.PostAsync("http://yada-yada.azurewebsites.net/api/pdf/Generate", content)
.GetAwaiter()
.GetResult()
.Content.ReadAsStringAsync().Result; // yes i know this is gross

我发现了这个帖子和其他说模拟的帖子。尝试了第一个答案,但在Kudu中手动修改了我的web.config之后(bc我不知道如何在我的项目中设置它(

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore requestTimeout="00:20:00"  processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".logsstdout" forwardWindowsAuthToken="false"/>
</system.webServer>
</configuration>

requestTimeout="00:20:00">是重要部分。

但我收到一个"500-请求超时。网络服务器未能在指定时间内响应。"。

我还尝试将.UseKestrel(...)添加到我的program.cs

public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseApplicationInsights()
.UseStartup<Startup>()
.UseKestrel(o =>
{
o.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(30);
})
.Build();;

但这似乎毫无作用。

是的,Azure负载均衡器的默认空闲超时设置约为四分钟,常见问题解答中对此进行了说明:https://learn.microsoft.com/en-us/azure/app-service/app-service-web-availability-performance-application-issues-faq#why-我请求的时间是230秒

Q: 为什么我的请求在230秒后超时?

Azure负载平衡器的默认空闲超时设置为四分钟。这通常是一个合理的网络请求响应时间限制。如果您的web应用程序需要后台处理,我们建议您使用Azure WebJobs。Azure web应用程序可以调用WebJobs,并在后台处理完成时收到通知。您可以从多种使用WebJobs的方法中进行选择,包括队列和触发器。WebJobs是为后台处理而设计的。您可以在WebJob中进行任意数量的后台处理。你可以使用webjob来完成你的任务,看看它进展如何。

此外,所有Azure Web应用程序(以及移动应用程序/服务、WebJobs和函数(都在一个称为沙箱的安全环境中运行。每个应用程序都在自己的沙盒中运行,将其执行与同一台机器上的其他实例隔离开来,并提供了额外的安全性和隐私度,否则这是不可用的。签出GitHub页面https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox#unsupported-框架,其中列出了Azure应用程序服务上支持和不支持的PDF生成器。

因此,Azure应用程序服务对请求有一个硬编码的230秒规则。即使您对web.config和/或startup.cs.进行了更改

我在这里找到了答案:https://stackoverflow.com/a/38676086/5919289和https://social.msdn.microsoft.com/Forums/en-US/17305ddc-07b2-436c-881b-286d1744c98f/503-errors-with-large-pdf-file?forum=windowsazurewebsitespreview

最新更新