[英]Long lasting http post not returning in Azure Webjob
我正在構建一個Azure Webjob,它將把我的Blob存儲中的數據發布到我的在客戶端環境中運行的其他(非Azure)Web服務中。 此http-POST的處理可能會花費很長時間(至少30分鍾),這很好,因為沒有用戶在等待此過程完成。
經過谷歌搜索和測試一天后,我的測試如下所示。
System.Net.Http.HttpClient
並將Timeout
設置為11分鍾來調用測試方法。 ApplicationSettings
下, Always On
設置為true,而應用程序設置WEBJOBS_IDLE_TIMEOUT
設置為3600
。 Console.WriteLine("Heartbeat")
(以解決空閑的CPU時間)。 這將導致System.Threading.Tasks.TaskCanceledException: A task was canceled.
當我從Visual Studio運行相同的測試時,它將在等待10分鍾后成功完成。
我想念什么嗎? 這是怎么回事?
編輯:包括我測試中的代碼,以及異常和stacktrace。
private static async Task<String> AzureWebJobTest()
{
var url = "[MyUrl]";
var json = new StringContent("[MyValidJSON]", Encoding.UTF8, "application/json");
var client = new HttpClient();
client.Timeout = TimeSpan.FromMinutes(11);
return await (await client.PostAsync(url, json)).Content.ReadAsStringAsync();
}
以及此函數引發的異常:
System.Threading.Tasks.TaskCanceledException: A task was canceled.
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at [MyProjectNamespace].Program.<AzureWebJobTest>d__5.MoveNext() in [MyLocalPath]\Program.cs:line 100
我懷疑請求的230秒超時限制會導致此問題。 正如David Ebbo在此主題中所說:
對於沒有發回任何數據的請求,有230秒(即不到4分鍾)的超時。 之后,即使實際上允許請求繼續服務器端,客戶端也會獲得您看到的500。
為解決此問題,我在Web服務上創建了一些請求管理。 通過使用System.ServiceModel.Dispatcher.IDispatchMessageInspector
,它跟蹤每個開始和結束的請求。 現在可以通過新的Web服務檢索這些請求的狀態。
結果:
Azure Webjob啟動持久請求,當它花費超過230秒時,它將捕獲超時異常,並將使用新的Web服務來繼續檢查原始(持久)請求的狀態,直到完成為止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.