Я создаю Azure Webjob, который будет отправлять данные из моего хранилища blob на другой (не лазурный) веб-сервис, который работает в моей клиентской среде. Обработка этого http-POST может занять очень много времени (не менее 30 минут), что прекрасно, потому что ни один пользователь не ждет завершения этого процесса.Долговечный пост http, не возвращающийся в Azure Webjob
После поиска в Интернете и тестирования в течение дня мой тест выглядит следующим образом.
- У Webservice есть метод тестирования, который возвращается после ожидания в течение 10 минут.
- Azure Webjob будет вызывать метод тестирования с использованием
System.Net.Http.HttpClient
сTimeout
, установленным на 11 минут. - В родительском веб-приложении Azure под
ApplicationSettings
,Always On
установлено значение true и установка приложенияWEBJOBS_IDLE_TIMEOUT
установлена в3600
. - Пока Azure Webjob ждет, он будет выполнять
Console.WriteLine("Heartbeat")
каждую секунду (чтобы работать во время холостого процессора).
Это приведет к System.Threading.Tasks.TaskCanceledException: A task was canceled.
Когда я запустил тот же тест из Visual Studio, он завершится успешно после ожидания в течение 10 минут.
Я что-то упустил? Что происходит?
EDIT: Включает код из моего теста, а также исключение и стек.
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
Вы пытались увеличить SCM_COMMAND_IDLE_TIMEOUT в своем веб-приложении Azure? – iikkoo
Привет, @iikkoo, спасибо за ваше предложение, но, к сожалению, это не сработало. Те же результаты –
Можете ли вы опубликовать полное исключение и трассировку? – iikkoo