2017-05-27 25 views
1

我正在我的web應用程序(App Service)下運行Premium級別的web作業。它調用REST API端點,這需要很長時間才能返回響應。網絡作業在20分鐘後中止,但根據文檔,Web作業可以在後臺運行長時間運行的任務。這似乎沒有按預期工作。連續運行webjob在20分鐘後中止

是否爲Web作業功能指定了最大超時時間?

代碼:

public async Task<HttpResponseMessage> GetAsync(Uri requestUrl) 
{ 
    _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", GetAadAuthentication().AccessToken); 
    var httpResponse = await _httpClient.GetAsync(requestUrl); 
    if (!httpResponse.IsSuccessStatusCode) 
    { 
     ProcessFailedRequest(httpResponse); 
    } 

    return httpResponse; 
} 

異常日誌:

[05/26/2017 21:28:01 > 6e349c: ERR ] Unhandled Exception: System.Threading.Tasks.TaskCanceledException: A task was canceled. 
[05/26/2017 21:28:01 > 6e349c: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
[05/26/2017 21:28:01 > 6e349c: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
[05/26/2017 21:28:01 > 6e349c: ERR ] at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 
[05/26/2017 21:28:01 > 6e349c: ERR ] at Util.testWebClient.<GetAsync>d__12.MoveNext() in d:\test\Util\testWebClient.cs:line 99 
[05/26/2017 21:28:01 > 6e349c: ERR ] --- End of stack trace from previous location where exception was thrown --- 
[05/26/2017 21:28:01 > 6e349c: ERR ] at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
[05/26/2017 21:28:01 > 6e349c: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
[05/26/2017 21:28:01 > 6e349c: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
[05/26/2017 21:28:01 > 6e349c: ERR ] at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 
[05/26/2017 21:28:01 > 6e349c: ERR ] at Util.testClient.<GetForecastResultAsync>d__7.MoveNext() in d:\test\Util\testClient.cs:line 135 
[05/26/2017 21:28:01 > 6e349c: ERR ] --- End of stack trace from previous location where exception was thrown --- 
[05/26/2017 21:28:01 > 6e349c: ERR ] at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
[05/26/2017 21:28:01 > 6e349c: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
[05/26/2017 21:28:01 > 6e349c: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
[05/26/2017 21:28:01 > 6e349c: ERR ] at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 
[05/26/2017 21:28:01 > 6e349c: ERR ] at AutoAggregation.Functions.<>c__DisplayClass18_0.<ProcessResultDownloadMessage>b__0(Object workItem) in d:\test\AutoAggregation\Functions.cs:line 198 
[05/26/2017 21:28:01 > 6e349c: ERR ] at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state) 
[05/26/2017 21:28:01 > 6e349c: ERR ] at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
[05/26/2017 21:28:01 > 6e349c: ERR ] at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
[05/26/2017 21:28:01 > 6e349c: ERR ] at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 
[05/26/2017 21:28:01 > 6e349c: ERR ] at System.Threading.ThreadPoolWorkQueue.Dispatch() 
[05/26/2017 21:28:01 > 6e349c: ERR ] at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() 

回答

1

我增加了HttpClient的超時爲:

_httpClient = new HttpClient(); 
_httpClient.Timeout=Timeout.InfiniteTimeSpan; 

以前它被設置爲

_httpClient.Timeout=new TimeSpan(0, 20, 0); 
1

也許你可以使用免費的託管計劃層?這(https://tomssl.com/2016/12/20/how-to-get-azure-webjobs-to-run-indefinitely-for-free/)博客精心描述了相同的問題和解決方法。對於專業用途,我建議增加託管計劃

TLDR:自由計劃下的應用程序池最多可以運行20分鐘。

+0

我運行在高級層蔚藍網站/ webjob。這20分鐘超時也適用於高級層面的網絡作業嗎? –

+0

在較高的計劃中,您可以啓用「始終開啓」,以消除此限制 –

相關問題