【问题标题】:Azure function's http trigger is giving 500 internal server errorAzure 函数的 http 触发器给出 500 内部服务器错误
【发布时间】:2019-03-21 04:39:45
【问题描述】:

我有一个带有 CosmosDB (sql api) 输出绑定的 http 触发器 当我对已部署的版本进行 POST 调用时,会出现 500 个内部服务器错误。

 public static class Function1
{
    [FunctionName("Function1")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] Request req,

  ILogger log, [CosmosDB(
            databaseName: "haveThatDB",
            collectionName: "Requests",
            ConnectionStringSetting = "CosmosDBConnection",CreateIfNotExists =true)] IAsyncCollector<Request> requestOutput
       )
    {
        log.LogInformation("C# HTTP trigger function processed a request.");
        await requestOutput.AddAsync(req);



        return req != null
            ? (ActionResult)new OkObjectResult($"Hello, {req.ItemRequested}")
            : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
    }
}

相同的代码在本地运行良好。

在 KUDU 和门户中不会为失败的请求生成日志。 如果我删除 cosmosDB 绑定,它会在本地工作(我可以看到正在创建的文档)以及在部署的 url 中,并且还会生成成功日志。

但是,一旦我能够观察到一些错误消息,例如 “解析布尔值时出错。路径 '',第 1 行,位置 1。”但在那之后我再也无法在日志中看到这个问题。因为在 500 内部服务器错误的情况下没有日志。 激活应用洞察也不会显示任何失败的 500 次命中。

【问题讨论】:

标签: azure azure-functions azure-cosmosdb-sqlapi


【解决方案1】:

如果没有更多信息,我假设您可能忘记在门户的应用程序设置中添加CosmosDBConnection,因为您的代码在本地和在线都可以在我这边工作。 local.settings.json 中的设置不会插入到门户,因为它们用于本地开发。

【讨论】:

  • 它有效。我在门户上添加了连接字符串。花了 3 天时间试图解决这个问题。非常感谢。我很难过,因为没有生成日志。而如果我们在本地错过了一个连接字符串,我们会提示它无法解析连接字符串。
  • 在 kudu 中也没有生成日志。我在原帖中也提到了这一点。
  • @RaasMasood 抱歉,我错过了关键信息。如果你想找到根本原因,你可以在 github 上重新打开问题。
  • 也遇到了这个问题 - 远程缺少本地存在的设置并且日志根本没有用
【解决方案2】:

我一直在尝试为添加书签功能实现 MS 学习教程,我发现每当我添加 CosmosDB 的输出绑定时,它都无法处理并生成相同的 500 内部错误。即使在 CosmosDB 中找不到 Testing 的输入参数中指定的 ID 时也会失败。

Azure 门户上的“代码+测试”面板还显示以下日志,这些日志没有提供任何线索,说明请求有什么问题。

2020-08-05T06:05:43Z   [Information]   Executing 'Functions.add-bookmark' (Reason='This function was programmatically called via the host APIs.', Id=b6b6617d-c1d6-4729-91c9-c0d5f18ddc1b)
2020-08-05T06:05:43Z   [Verbose]   Sending invocation id:b6b6617d-c1d6-4729-91c9-c0d5f18ddc1b
2020-08-05T06:05:43Z   [Verbose]   Posting invocation id:b6b6617d-c1d6-4729-91c9-c0d5f18ddc1b on workerId:70d0b104-cdf6-4ad9-b2ac-d7e079b80544
2020-08-05T06:05:43Z   [Error]   Executed 'Functions.add-bookmark' (Failed, Id=b6b6617d-c1d6-4729-91c9-c0d5f18ddc1b, Duration=102ms)

由于我也拥有与输入绑定相同的 CosmosDB 帐户,因此我确信 CosmosDB 连接不是问题。

然后我继续更改了一些运行时参数。在玩了几个之后,一旦我将 RunTime 版本更改为 ~2,它就开始正常工作了。

我仍然不确定为什么 Runtime 3.0 不起作用,Github 上的 Azure Functions 团队已经有一个 BUG https://github.com/Azure/Azure-Functions/issues/1670 开放。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    相关资源
    最近更新 更多