无法解析 属性 'CosmosDBAttribute.ConnectionStringSetting' 的值,但已将其添加到应用程序设置中
Unable to resolve the value for property 'CosmosDBAttribute.ConnectionStringSetting' but it is added in application settings
我遇到了这个似乎很容易解决的问题war,所以我已经修复了我在 SO 和 MS 文档中找到的信息,但仍然没有成功。同样的问题发生在我的开发环境和部署在 Azure 云中之后。
我有一个绑定到 cosmosDB 实例的函数,如下所示:
{
"scriptFile" : "../my-api-1.0-SNAPSHOT.jar",
"entryPoint" : "com.my.package.MyController.functionToCall",
"bindings" : [ {
"type" : "httpTrigger",
"direction" : "in",
"name" : "req",
"route" : "FunctionToCall",
"methods" : [ "GET" ],
"authLevel" : "ANONYMOUS"
}, {
"type" : "cosmosDB",
"direction" : "in",
"name" : "functionToCall",
"databaseName" : "myproject-db",
"partitionKey" : "{Query.id}",
"connectionStringSetting" : "AccountEndpoint=https://cosmosDBAccountName.documents.azure.com:443/; AccountKey=PrimaryKeyFromCosmosDBSettings==;",
"id" : "{Query.id}",
"collectionName" : "ObjectToReturn"
}, {
"type" : "http",
"direction" : "out",
"name" : "$return"
} ]
}
@CosmosDBInput(name = "name",
databaseName = "myproject-db",
collectionName = "ObjectToReturn",
id = "{Query.id}",
partitionKey = "{Query.id}",
connectionStringSetting = HARDCODEDFINALSTATICVAR)
private static final HARDCODEDFINALSTATICVAR = "AccountEndpoint=https://cosmosDBAccountName.documents.azure.com:443/; AccountKey=PrimaryKeyFromCosmosDBSettings==;"
我已将 CosmosDBAttribute.ConnectionStringSetting 添加到我的应用程序设置中作为 CosmosDBAttribute.ConnectionStringSetting 和 ConnectionStringSetting 并使用如上所示的值,并尝试删除端口号后的斜杠,并尝试在两者之间添加一个空格URL 和密钥,加上将其保存为连接字符串而不是应用程序设置...到目前为止运气不好。我在遥测中仍然收到 500 HTTP 错误。
我开始怀疑,当我从零开始创建项目和通过发布管道从 Azure devops 以 azure 部署的文件夹时,到目前为止我还没有添加 local.setting 文件,这可能是相关的。我的理解是 local.setting.json 文件只对本地部署有用。在这方面,我通过 npm 和 func install extension 安装了 azure core extensions,并在本地创建了一个 obj 下的集合 ob 文件和一个 csproj 文件,其中包含我在本地需要的扩展名:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<WarningsAsErrors></WarningsAsErrors>
<DefaultItemExcludes>**</DefaultItemExcludes>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.CosmosDB" Version="3.0.1" />
<PackageReference Include="Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator" Version="1.0.1" />
</ItemGroup>
</Project>
当我尝试使用 mvn azure-functions 在本地 运行 时:运行 该函数在本地工作,但是当我点击端点的 URL 时,我得到了同样的错误:无法解析 属性 'CosmosDBAttribute.ConnectionStringSetting' 的值。然而,尝试使用 local.setting.json 文件 mvn package 会给我一个不同的错误,并抱怨没有找到函数,我应该将它们添加到配置文件中......这可能是一个不同的分支调查所以除非它响铃我现在不会去那里。
我没有 local.setting.json 文件,我通过发布管道将项目部署为文件夹而不是 zip 或 war 文件,我在函数中的 ConnectionStringSetting 现在被硬编码在一个最终的静态变量中,并且 CosmosDBAttribute.ConnectionStringSetting 被添加到应用程序设置中,其中包含我想到的所有排列。如果你发现我遗漏了什么错误,你能告诉我吗?
根据 Azure Functions 文档 (https://docs.microsoft.com/azure/azure-functions/functions-bindings-cosmosdb-v2-trigger?tabs=csharp#configuration),Json 中 connectionStringSetting
的内容应该是设置的 name,而不是连接字符串本身。我对 Java 不是很熟悉,但通常 Json 和函数签名都指向相同的值(配置的名称,而不是值)。
"connectionStringSetting" : "THE_SETTING_NAME",
@CosmosDBInput(name = "name",
databaseName = "myproject-db",
collectionName = "ObjectToReturn",
id = "{Query.id}",
partitionKey = "{Query.id}",
connectionStringSetting = "THE_SETTING_NAME")
然后您转到 Azure 中的 Function App 并创建一个具有相同名称的 Application Setting,该值将是实际的连接字符串。
在本地工作时,您的 local.settings.json
具有 属性 的名称和实际值。
我遇到了这个似乎很容易解决的问题war,所以我已经修复了我在 SO 和 MS 文档中找到的信息,但仍然没有成功。同样的问题发生在我的开发环境和部署在 Azure 云中之后。
我有一个绑定到 cosmosDB 实例的函数,如下所示:
{
"scriptFile" : "../my-api-1.0-SNAPSHOT.jar",
"entryPoint" : "com.my.package.MyController.functionToCall",
"bindings" : [ {
"type" : "httpTrigger",
"direction" : "in",
"name" : "req",
"route" : "FunctionToCall",
"methods" : [ "GET" ],
"authLevel" : "ANONYMOUS"
}, {
"type" : "cosmosDB",
"direction" : "in",
"name" : "functionToCall",
"databaseName" : "myproject-db",
"partitionKey" : "{Query.id}",
"connectionStringSetting" : "AccountEndpoint=https://cosmosDBAccountName.documents.azure.com:443/; AccountKey=PrimaryKeyFromCosmosDBSettings==;",
"id" : "{Query.id}",
"collectionName" : "ObjectToReturn"
}, {
"type" : "http",
"direction" : "out",
"name" : "$return"
} ]
}
@CosmosDBInput(name = "name",
databaseName = "myproject-db",
collectionName = "ObjectToReturn",
id = "{Query.id}",
partitionKey = "{Query.id}",
connectionStringSetting = HARDCODEDFINALSTATICVAR)
private static final HARDCODEDFINALSTATICVAR = "AccountEndpoint=https://cosmosDBAccountName.documents.azure.com:443/; AccountKey=PrimaryKeyFromCosmosDBSettings==;"
我已将 CosmosDBAttribute.ConnectionStringSetting 添加到我的应用程序设置中作为 CosmosDBAttribute.ConnectionStringSetting 和 ConnectionStringSetting 并使用如上所示的值,并尝试删除端口号后的斜杠,并尝试在两者之间添加一个空格URL 和密钥,加上将其保存为连接字符串而不是应用程序设置...到目前为止运气不好。我在遥测中仍然收到 500 HTTP 错误。
我开始怀疑,当我从零开始创建项目和通过发布管道从 Azure devops 以 azure 部署的文件夹时,到目前为止我还没有添加 local.setting 文件,这可能是相关的。我的理解是 local.setting.json 文件只对本地部署有用。在这方面,我通过 npm 和 func install extension 安装了 azure core extensions,并在本地创建了一个 obj 下的集合 ob 文件和一个 csproj 文件,其中包含我在本地需要的扩展名:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<WarningsAsErrors></WarningsAsErrors>
<DefaultItemExcludes>**</DefaultItemExcludes>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.CosmosDB" Version="3.0.1" />
<PackageReference Include="Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator" Version="1.0.1" />
</ItemGroup>
</Project>
当我尝试使用 mvn azure-functions 在本地 运行 时:运行 该函数在本地工作,但是当我点击端点的 URL 时,我得到了同样的错误:无法解析 属性 'CosmosDBAttribute.ConnectionStringSetting' 的值。然而,尝试使用 local.setting.json 文件 mvn package 会给我一个不同的错误,并抱怨没有找到函数,我应该将它们添加到配置文件中......这可能是一个不同的分支调查所以除非它响铃我现在不会去那里。
我没有 local.setting.json 文件,我通过发布管道将项目部署为文件夹而不是 zip 或 war 文件,我在函数中的 ConnectionStringSetting 现在被硬编码在一个最终的静态变量中,并且 CosmosDBAttribute.ConnectionStringSetting 被添加到应用程序设置中,其中包含我想到的所有排列。如果你发现我遗漏了什么错误,你能告诉我吗?
根据 Azure Functions 文档 (https://docs.microsoft.com/azure/azure-functions/functions-bindings-cosmosdb-v2-trigger?tabs=csharp#configuration),Json 中 connectionStringSetting
的内容应该是设置的 name,而不是连接字符串本身。我对 Java 不是很熟悉,但通常 Json 和函数签名都指向相同的值(配置的名称,而不是值)。
"connectionStringSetting" : "THE_SETTING_NAME",
@CosmosDBInput(name = "name",
databaseName = "myproject-db",
collectionName = "ObjectToReturn",
id = "{Query.id}",
partitionKey = "{Query.id}",
connectionStringSetting = "THE_SETTING_NAME")
然后您转到 Azure 中的 Function App 并创建一个具有相同名称的 Application Setting,该值将是实际的连接字符串。
在本地工作时,您的 local.settings.json
具有 属性 的名称和实际值。