【发布时间】:2022-01-07 06:31:19
【问题描述】:
尝试运行该函数时出现以下错误: 无法解析属性“CosmosDBAttribute.ConnectionStringSetting”的值。确保设置存在且具有有效值。
该属性同时存在于 local.settings.json 和我在 Azure 上的应用程序设置中。
一个重要的一点:它现在可以在我的机器上运行,但它不能正常工作。即使我没有进行任何更改,它也开始不知所措。对于其他试图在他们的机器上运行它的人来说,它仍然不起作用。
另一个重要的一点:他们可以通过将属性添加到他们 PC 上的环境变量来使其工作,但这只是一种解决方法。
我正在使用 Windows 10 并使用 Intellij 作为我的 IDE。
这是我要运行的函数的代码:
@FunctionName("postLogItem")
public HttpResponseMessage post(
@HttpTrigger(name = "req",
methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@CosmosDBOutput(
name = "document",
databaseName = "AuditLog",
collectionName = "Logs",
connectionStringSetting = "CosmosDBAttribute.ConnectionStringSetting")
OutputBinding<String> document,
final ExecutionContext context) {
// Item list
context.getLogger().info("Parameters are: " + System.getenv("CosmosDBAttribute.ConnectionStringSetting"));
// Parse query parameter
String query = request.getQueryParameters().get("desc");
String name = request.getBody().orElse(query);
// Generate random ID
final int id = Math.abs(new Random().nextInt());
// Generate document
final String jsonDocument = "{\"id\":\"" + id + "\", " +
"\"description\": \"" + name + "\"}";
context.getLogger().info("Document to be saved: " + jsonDocument);
//LogItem item = new LogItem("123", "101010", "{'name':'potato'}", LogItem.TYPE.PAYMENT);
document.setValue(jsonDocument);
return request.createResponseBuilder(HttpStatus.OK)
.body("Document created successfully.")
.build();
}
【问题讨论】:
-
connectionStringSetting的值通常是设置的名称(在本地 json 中或在函数的连接字符串部分中创建)。你把CosmosDBAttribute.ConnectionStringSetting问题可能出在点上了。您是否尝试过使用CosmosDBConnection之类的东西,然后将其用作函数应用程序中的连接字符串或设置名称? -
这不起作用。让我澄清一下,“CosmosDBAttribute.ConnectionStringSetting”是出现在错误消息中的内容,而不是我定义的某个值。我是后来才定义的。最初我使用了像 CosmosDbConnection 这样的值。我应该补充一点,我正在使用 Java,也许这就是导致某些问题的原因?
-
该值出现在错误消息中,因为它在您共享的代码中:
connectionStringSetting = "CosmosDBAttribute.ConnectionStringSetting",您告诉函数您希望从名为CosmosDBAttribute.ConnectionStringSetting的设置中读取连接字符串。该点可能会导致问题,因此我会将其更改为connectionStringSetting = "MyCosmosConfig"或其他简单的名称,并在 Function App 中创建一个具有该名称的配置。 -
就像我说的,我只是在错误消息中看到它之后才定义它。另外,我尝试了您今天早些时候描述的内容,但没有解决。
-
您是在函数应用程序的应用程序设置或连接字符串部分定义它们吗?您是否尝试过在另一个方面定义它?
标签: azure azure-functions azure-cosmosdb