Azure功能在App服务计划上调用两次

时间:2018-05-15 11:34:06

标签: azure azure-functions

我的azure函数中有以下代码,手动超时为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 :(得分:2)

关于http请求超时并重试。

当我直接在门户网站中运行该功能时,它将在@Sumit和@Joey看到的近4米之后再次被调用。我将延迟减少到10秒,该功能仅触发一次并返回200.

尝试使用postman发布请求,这次只使用下面的响应消息触发该功能一次。

enter image description here

正如我们在代码中看到的那样,直到10米进程完成后才会发回响应。它超出了超时设置,似乎按设计,门户网站发布的请求将在超时后重试。

<强>更新

Azure功能是一种Azure Web App,请参阅Azure Web App time out 230s setting

  

对于未发送任何数据的请求,有230秒(即少于4分钟)超时。之后,客户端获得您看到的500,即使实际上允许请求继续服务器端

答案 1 :(得分:0)

我重现了您的问题,发现它似乎是issue

  

此修补程序现已部署在版本1.0.11015.0中(在“功能”门户的“设置”页面中可见)。如果您没有运行此版本,请手动重新启动您的应用程序,它将获取最新版本。

另外,正如您所说,您使用的是应用服务计划。您可以run longer而不是消费计划允许的最长执行时间(10分钟)。