Azure Function 在应用程序服务计划中调用自身两次

标签 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:内部服务器错误)。

最佳答案

是关于http请求超时和重试的。

当我直接在门户中运行该函数时,它将在近 4m 后再次调用,就像 @Sumit 和 @Joey 所看到的那样。我将Delay减少到10s,函数只触发一次,返回200。

尝试使用postman发送请求,这次函数只触发一次,响应消息如下。

enter image description here

正如我们在代码中看到的,直到 10m 进程完成才返回响应。它超出了超时设置,并且按照设计,门户发布的请求将在超时后重试。

更新

Azure function 是 Azure Web App 的一种,请参阅Azure Web App time out 230s setting

There is a 230 second (i.e. a little less than 4 mins) timeout for requests that are not sending any data back. After that, the client gets the 500 you saw, even though in reality the request is allowed to continue server side

关于Azure Function 在应用程序服务计划中调用自身两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50349161/

相关文章:

Azure 存储表传输速率超出 - 怎么办?

azure - 获取 Azure 数据工厂中 blob 文件的自定义元数据

azure 函数: set blob filename from http request

azure - 使用 Azure 管理 API 进行身份验证

node.js - 如何编写使用express api的azure函数

javascript - Azure Functions [Node.js] : context. BindingData 不包含我的路由参数(如文档所示)

azure - 如何允许在 Azure 租户中公开登录我的应用程序注册?

javascript - Azure Functions 应用程序完整日志

visual-studio - 无法评估扩展元数据的 'Cosmos.CRTCompat.dll'。异常消息: Bad IL format

cors - Azure 函数 : CORS: How to support "Access-Control-Allow-Credentials" header AND OPTIONS pre-flight?