Ответ 1
Это, похоже, решило мою проблему:
if (Counter % 25 == 0)
Console.WriteLine("Heartbeat");
Думаю, вам нужно продолжать писать на консоль, чтобы сохранить работу.
У нас проблема с Azure Web Jobs. Мы создали консольное приложение С#, заархивировали его и создали новый Web Job. Это консольное приложение С#, которое будет постоянно ударять по одной из наших веб-служб для обработки элементов в очереди.
Всякий раз, когда мы запускаем Web Job, мы получаем следующую ошибку:
'cmd/c xxxxxxxx....' прерывается из-за отсутствия выхода и активности ЦП для 121 секунд. Вы можете увеличить значение SCM_COMMAND_IDLE_TIMEOUT для решить проблему
Когда мы увеличили SCM_COMMAND_IDLE_TIMEOUT до 600
(10 минут). Работа выполняется в течение 10 минут, а затем мы получаем ту же ошибку с той же ошибкой 121 seconds
.
Что мы делаем неправильно?
Вот консольный код приложения:
static void Main(string[] args)
{
bool ThereAreItemsInQueue = true;
int Counter = 1;
DateTime StartTime = DateTime.Now;
while(ThereAreItemsInQueue)
{
Task.Run(() => {
try
{
//DEQUEUE
byte[] response = HttpHelper.HttpPOST(@"xxxxxxxxxxxxx", new byte[0]);
string strResponse = System.Text.Encoding.Default.GetString(response);
System.Diagnostics.Trace.TraceError("Attempt #" + Counter + "DEQUEUE FINISHED. Response:" + strResponse);
//CHECK IF THE QUEUE IS EMPTY
if (strResponse.Contains("Were Done"))
ThereAreItemsInQueue = false;
}
catch(Exception ex)
{
System.Diagnostics.Trace.TraceError("Error Has Occured on attempt #" + Counter + "." + ex.Message + "\r" + ex.StackTrace);
}
});
System.Threading.Thread.Sleep(5000);
//SEE IF THIS HAS BEEN RUNNING FOR MORE THAN 24 HOURS
if (DateTime.Now.Subtract(StartTime).TotalHours >= 24)
ThereAreItemsInQueue = false;
Counter++;
}
}
Подходим ли мы к этой проблеме неправильно?
Примечание: каждый запрос HttpHelper.HttpPOST
занимает около 2 секунд - так что не проблема.
Примечание2: Мы используем Task.Run
для создания типа запросов "set-it-and-forget-it".
Примечание3: настройка веб-сайта "Всегда включено" - включена.
Это, похоже, решило мою проблему:
if (Counter % 25 == 0)
Console.WriteLine("Heartbeat");
Думаю, вам нужно продолжать писать на консоль, чтобы сохранить работу.
Для запущенных веб-приложений способ увеличения ожидания простоя использует настройку приложения: WEBJOBS_IDLE_TIMEOUT. Установите требуемый тайм-аут в секундах.
Ошибка запутанна и относится только к тайм-ауту простоя во время развертывания.
https://github.com/projectkudu/kudu/wiki/Web-jobs#configuration-settings