Azure 函数的 http 触发器给出 500 内部服务器错误
Azure function's http trigger is giving 500 internal server error
我有一个带有 CosmosDB 输出绑定的 http 触发器 (sql api)
当我对部署的版本进行 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,并且还会生成成功日志。
然而,一旦我能够观察到一些错误信息,比如
"Error parsing boolean value. Path '', line 1, position 1." 但在那之后我再也无法在日志中看到这个问题。因为在 500 内部服务器错误的情况下没有日志。
激活应用程序洞察力也不会显示任何失败的 500 次点击。
没有进一步的信息,我假设您可能忘记在门户的应用程序设置中添加 CosmosDBConnection
,因为您的代码在我这边本地和在线工作。 local.settings.json
中的设置未插入门户,因为它们用于本地开发。
我一直在尝试在 MS Learning 中为 add-bookmark 函数实现一个教程,我发现每当我添加 CosmosDB 的输出绑定时,它都无法处理并生成相同的 500 内部错误.即使在 CosmosDB 中找不到在测试中输入参数中指定的 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 不起作用,Azure Functions 团队已经在 Github 上公开了一个 BUG https://github.com/Azure/Azure-Functions/issues/1670。
我有一个带有 CosmosDB 输出绑定的 http 触发器 (sql api) 当我对部署的版本进行 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,并且还会生成成功日志。
然而,一旦我能够观察到一些错误信息,比如 "Error parsing boolean value. Path '', line 1, position 1." 但在那之后我再也无法在日志中看到这个问题。因为在 500 内部服务器错误的情况下没有日志。 激活应用程序洞察力也不会显示任何失败的 500 次点击。
没有进一步的信息,我假设您可能忘记在门户的应用程序设置中添加 CosmosDBConnection
,因为您的代码在我这边本地和在线工作。 local.settings.json
中的设置未插入门户,因为它们用于本地开发。
我一直在尝试在 MS Learning 中为 add-bookmark 函数实现一个教程,我发现每当我添加 CosmosDB 的输出绑定时,它都无法处理并生成相同的 500 内部错误.即使在 CosmosDB 中找不到在测试中输入参数中指定的 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 不起作用,Azure Functions 团队已经在 Github 上公开了一个 BUG https://github.com/Azure/Azure-Functions/issues/1670。