Http触发器Azure函数随机返回404
我们在函数运行时3上有一个.net核心azure函数。这在本地和大部分时间在我们部署的应用程序服务上运行都非常好。然而,我们已经经历了间歇性的404响应,请求在其他时间完全可以通过 我们的日志或application insights遥测中没有出现失败请求的条目 在azure功能主机github项目上,感觉很像这个问题: 尽管这是针对运行时1或2的函数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的函数 是否有人遇到过类似的问题,或者知道如何获取其他日志信息,这些信息可能会突出显示我们遇到的问题。在向外扩展过程中可能会发生这种情况,或者您的功能应
是否有人遇到过类似的问题,或者知道如何获取其他日志信息,这些信息可能会突出显示我们遇到的问题。在向外扩展过程中可能会发生这种情况,或者您的功能应用程序将要从一个服务器更改为另一个服务器(出于某种原因)。这实际上是无服务器应用程序的缺点 但我可以给你的建议是:
- 创建类似以下内容的心跳函数:
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”); }
这也将为您提供一个随时可用的Azure函数的温暖实例。但很明显,每次呼叫心跳时,您都会将100万次免费呼叫花费在消费计划上,这取决于您呼叫AF的频率。这是一个相当大的堆栈的一部分,因此为几个呼叫付费不是问题。然而,令人惊讶的是,当存在更合适的http代码时,azure函数主机中间件会选择为合法请求返回404。。。或者当它应该启动一个实例来响应时。虽然创建心跳函数并不复杂,但在我们所有的函数应用程序中都使用它有点愚蠢。我完全理解你。我只是想知道在您的案例中实施此解决方案时会发生什么。以后你能告诉我输出结果吗?