Функция Azure дважды вызывает себя в плане обслуживания приложения - PullRequest
0 голосов
/ 15 мая 2018

У меня в коде лазера следующий код с 10-минутным тайм-аутом вручную.

using System.Net;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");
    try
    {
        TimeSpan ts = TimeSpan.FromMinutes(1);
        for(int i=0;i<10;i++)
        {
            await Task.Delay(ts);
            log.Info(String.Format("After 1 Min Delay {0}",i));
        }
        log.Info(String.Format("After 10 Min Delay "));
        return req.CreateResponse(HttpStatusCode.OK);
    }
    catch (Exception e)
    {
        log.Info(String.Format("exception: {0}", e));
        return req.CreateResponse(HttpStatusCode.BadRequest);
    }
}

Когда я запускаю вышеупомянутую функцию в Azure, я вижу, что функция создает новый экземпляр через 3 минуты. (проверьте журнал ниже)

2018-05-15T11:12:42  Welcome, you are now connected to log-streaming service.
2018-05-15T11:12:55.826 [Info] Function started (Id=f25e0bbd-7103-4823-b8f1-ef28888f7007)
2018-05-15T11:12:55.826 [Info] C# HTTP trigger function processed a request.
2018-05-15T11:13:55.844 [Info] After 1 Min Delay 0
2018-05-15T11:14:55.857 [Info] After 1 Min Delay 1
2018-05-15T11:15:55.862 [Info] After 1 Min Delay 2
2018-05-15T11:16:47.385 [Info] Function started (Id=7371ed94-9b62-40cc-bec0-00b8d5e0a250)
2018-05-15T11:16:47.385 [Info] C# HTTP trigger function processed a request.
2018-05-15T11:16:55.879 [Info] After 1 Min Delay 3
2018-05-15T11:17:47.395 [Info] After 1 Min Delay 0
2018-05-15T11:17:55.883 [Info] After 1 Min Delay 4
2018-05-15T11:18:47.400 [Info] After 1 Min Delay 1
2018-05-15T11:18:55.899 [Info] After 1 Min Delay 5
2018-05-15T11:19:47.411 [Info] After 1 Min Delay 2
2018-05-15T11:19:55.914 [Info] After 1 Min Delay 6
2018-05-15T11:20:47.413 [Info] After 1 Min Delay 3
2018-05-15T11:20:55.920 [Info] After 1 Min Delay 7
2018-05-15T11:21:47.416 [Info] After 1 Min Delay 4
2018-05-15T11:21:55.930 [Info] After 1 Min Delay 8
2018-05-15T11:22:47.436 [Info] After 1 Min Delay 5
2018-05-15T11:22:55.936 [Info] After 1 Min Delay 9
2018-05-15T11:22:55.936 [Info] After 10 Min Delay
2018-05-15T11:22:55.936 [Info] Function completed (Success, Id=f25e0bbd-7103-4823-b8f1-ef28888f7007, Duration=600105ms)
2018-05-15T11:23:47.447 [Info] After 1 Min Delay 6
2018-05-15T11:24:47.452 [Info] After 1 Min Delay 7
2018-05-15T11:25:47.467 [Info] After 1 Min Delay 8
2018-05-15T11:26:47.478 [Info] After 1 Min Delay 9
2018-05-15T11:26:47.478 [Info] After 10 Min Delay
2018-05-15T11:26:47.478 [Info] Function completed (Success, Id=7371ed94-9b62-40cc-bec0-00b8d5e0a250, Duration=600086ms)

В приведенном выше журнале видно, что функция azure вызывается дважды, а также выдает ошибку (500: внутренняя ошибка сервера) и после завершения ее выполнения.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Это время ожидания запроса HTTP и повторите попытку.

Когда я запускаю функцию прямо в портале, она будет вызвана снова через 4 метра, как видели @Sumit и @Joey. Я уменьшаю задержку до 10 с, и функция срабатывает только один раз и возвращает 200.

Попробуйте использовать почтальон для отправки запроса, на этот раз функция активируется только один раз с ответным сообщением ниже.

enter image description here

Как мы видим из кода, ответ не отправляется до тех пор, пока не завершится 10-минутный процесс. Это за пределами настройки тайм-аута, и кажется, что дизайн, отправленный порталом, будет повторен после тайм-аута.

Обновление

Функция Azure - это один из видов веб-приложений Azure, см. Настройка времени ожидания 230 веб-приложений Azure .

Для запросов, которые не отправляют никаких данных, время ожидания составляет 230 секунд (т. Е. Чуть менее 4 минут). После этого клиент получает 500, которые вы видели, хотя на самом деле запрос может продолжаться на стороне сервера

0 голосов
/ 16 мая 2018

Я воспроизвожу вашу проблему и обнаружил, что это проблема .

, исправление теперь развернуто в версии 1.0.11015.0 (отображается на странице «Настройки»).портала функций).Если вы не используете эту версию, перезапустите приложение вручную, и оно подберет последнюю версию.

Также, как вы сказали, вы используете план обслуживания приложения.Вы могли бы работать дольше , чем максимально допустимое время выполнения плана потребления (из 10 минут).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...