簡體   English   中英

.Net Core API長時間運行的請求

[英].Net Core api long running request

我有一個調用.Net Core API的Web應用程序,用於生成PDF文檔。 我正在做很多HTML到pdf的轉換,因此需要一段時間才能完成200頁的文檔。 我在我的本地服務而不是AppService中使用它。 首先,我得到“指定的CGI應用程序遇到錯誤,服務器終止了該過程。” 如果我瀏覽了100頁以上(小頁面集工作)。

調用我的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后(不列顛哥倫比亞省,我不知道如何在我的項目中設置它)

<?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=".\logs\stdout" forwardWindowsAuthToken="false"/>
  </system.webServer>
</configuration>

requestTimeout =“ 00:20:00”是重要的部分。

但是我收到“ 500-請求超時。Web服務器無法在指定的時間內響應。”。

我也嘗試將.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 Load Balancer的默認空閑超時設置大約為四分鍾,在此處的常見問題中對此進行了說明: https : //docs.microsoft.com/zh-cn/azure/app-service/app-service-web-availability-性能應用程序問題常見問題#為什么我的請求超時時間是230秒

問:為什么我的請求在230秒后超時?

Azure負載平衡器的默認空閑超時設置為四分鍾。 通常,這是Web請求的合理響應時間限制。 如果您的Web應用程序需要后台處理,則建議使用Azure WebJobs。 Azure Web應用程序可以調用WebJobs,並在后台處理完成時收到通知。 您可以從多種使用WebJob的方法中進行選擇,包括隊列和觸發器。 WebJobs專為后台處理而設計。 您可以在WebJob中進行任意數量的后台處理。 您可以將webjob用於您的任務,看看它如何進行。

此外,所有Azure Web Apps(以及移動應用程序/服務,WebJob和功能)都在稱為沙箱的安全環境中運行。 每個應用程序都在其自己的沙箱中運行,從而將其執行與同一台計算機上的其他實例隔離開來,並提供其他程度的安全性和隱私性,否則這些安全性和隱私性將是不可用的。 檢出GitHub頁面https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox#unsupported-frameworks ,其中列出了Azure App Service上受支持和不受支持的PDF生成器。

因此,事實證明Azure App Service對於請求具有硬編碼的230秒規則。 即使您更改了web.config和/或startup.cs。

我在這里找到了答案: https : //stackoverflow.com/a/38676086/5919289https://social.msdn.microsoft.com/Forums/en-US/17305ddc-07b2-436c-881b-286d1744c98f/503- PDF檔案錯誤?forum = windowsazure網站預覽

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM