Http触发器Azure函数随机返回404

Http触发器Azure函数随机返回404,azure,azure-functions,http-status-code-404,serverless,Azure,Azure Functions,Http Status Code 404,Serverless,我们在函数运行时3上有一个.net核心azure函数。这在本地和大部分时间在我们部署的应用程序服务上运行都非常好。然而,我们已经经历了间歇性的404响应,请求在其他时间完全可以通过 我们的日志或application insights遥测中没有出现失败请求的条目 在azure功能主机github项目上,感觉很像这个问题: 尽管这是针对运行时1或2的函数 是否有人遇到过类似的问题,或者知道如何获取其他日志信息,这些信息可能会突出显示我们遇到的问题。在向外扩展过程中可能会发生这种情况,或者您的功能应

我们在函数运行时3上有一个.net核心azure函数。这在本地和大部分时间在我们部署的应用程序服务上运行都非常好。然而,我们已经经历了间歇性的404响应,请求在其他时间完全可以通过

我们的日志或application insights遥测中没有出现失败请求的条目

在azure功能主机github项目上,感觉很像这个问题: 尽管这是针对运行时1或2的函数


是否有人遇到过类似的问题,或者知道如何获取其他日志信息,这些信息可能会突出显示我们遇到的问题。

在向外扩展过程中可能会发生这种情况,或者您的功能应用程序将要从一个服务器更改为另一个服务器(出于某种原因)。这实际上是无服务器应用程序的缺点

但我可以给你的建议是:

  • 创建类似以下内容的心跳函数:

    private readonly IAsyncRepository<Business> _businessAsyncRepository;
    
    public HeartBeat(IAsyncRepository<Business> businessAsyncRepository)
    {
        // Your all DI injections are here
        _businessAsyncRepository = businessAsyncRepository;
    }
    
    [FunctionName(nameof(HeartBeat))]
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req,
        ILogger log)
    {
        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        return new OkObjectResult("OK");
    }
    
    private readonly iSyncResposition\u businessAsyncRepository;
    公共心跳(iSyncResposition businessAsyncRepository)
    {
    //你所有的注射都在这里
    _businessAsyncRepository=businessAsyncRepository;
    }
    [函数名(心跳的名称))]
    公共异步任务运行(
    [HttpTrigger(AuthorizationLevel.Anonymous,“get”,Route=null)]HttpRequest请求,
    ILogger日志)
    {
    string requestBody=等待新的StreamReader(req.Body).ReadToEndAsync();
    动态数据=JsonConvert.DeserializeObject(requestBody);
    返回新的OkObjectResult(“OK”);
    }
    
然后在Application Insights上创建可用性测试并调用HeartBeat


这也将为您提供一个随时可用的Azure函数的温暖实例。但很明显,每次呼叫心跳时,您都会将100万次免费呼叫花费在消费计划上,这取决于您呼叫AF的频率。

这是一个相当大的堆栈的一部分,因此为几个呼叫付费不是问题。然而,令人惊讶的是,当存在更合适的http代码时,azure函数主机中间件会选择为合法请求返回404。。。或者当它应该启动一个实例来响应时。虽然创建心跳函数并不复杂,但在我们所有的函数应用程序中都使用它有点愚蠢。我完全理解你。我只是想知道在您的案例中实施此解决方案时会发生什么。以后你能告诉我输出结果吗?