Время ожидания команды Azure WebJob

У нас проблема с 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: настройка веб-сайта "Всегда включено" - включена.

Ответы

Ответ 1

Это, похоже, решило мою проблему:

if (Counter % 25 == 0)
   Console.WriteLine("Heartbeat");

Думаю, вам нужно продолжать писать на консоль, чтобы сохранить работу.

Ответ 2

Для запущенных веб-приложений способ увеличения ожидания простоя использует настройку приложения: WEBJOBS_IDLE_TIMEOUT. Установите требуемый тайм-аут в секундах.

Ошибка запутанна и относится только к тайм-ауту простоя во время развертывания.

https://github.com/projectkudu/kudu/wiki/Web-jobs#configuration-settings