我有一个http触发器,其输出绑定为CosmosDB(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中起作用,并且还会生成成功日志。
但是一旦我能够观察到一些错误消息,例如 “解析布尔值时出错。路径”,第1行,位置1。”但是之后,我再也无法在日志中看到此问题。因为在发生500个内部服务器错误的情况下没有日志。 激活应用程序见解也不会显示任何500次失败。
答案 0 :(得分:1)
如果没有进一步的信息,我想您可能会忘记在门户网站的“应用程序设置”中添加CosmosDBConnection
,因为您的代码在本地和在线方面都可以使用。 local.settings.json
中的设置未插入门户网站,因为它们用于本地开发。
答案 1 :(得分:0)
我一直在尝试为添加书签功能在MS Learning中实现一个教程,我发现,每当添加CosmosDB的Output绑定时,它都无法处理,并且会生成相同的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)
由于我也具有与Input Binding相同的CosmosDB帐户,因此我确定CosmosDB连接不是问题。
然后,我继续更改一些运行时参数。与其中的几个玩了之后,将RunTime版本更改为〜2后,它就可以正常工作了。
我仍然不确定为什么Runtime 3.0无法运行,Github上的Azure Functions团队已经打开了一个错误https://github.com/Azure/Azure-Functions/issues/1670。