我正在try 从Azure应用程序配置中获取配置,并使用CosmosDbTrigger参数中的值.我正在使用隔离的工作者,从进程中migrations.这曾经是可行的,但现在我使用的是隔离工作线程,该函数无法进行索引.它似乎没有从应用程序配置中看到这些值.
如果您能提供任何指导或帮助,我们将不胜感激.
在使用.ConfigureAppConfiguration时作为提供程序添加的应用程序配置
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureAppConfiguration(configBuilder =>
{
//connection variable omitted for brevity and security
configBuilder.AddAzureAppConfiguration(connection);
})
进程内代码使用类似下面的代码,但它位于
public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
var config = builder.ConfigurationBuilder
.AddEnvironmentVariables()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true);
config.AddAzureAppConfiguration(connection);
_config = config.Build();
}
示例函数
[Function(nameof(SampleFunction))]
public async Task SampleFunctionAsync([CosmosDBTrigger(
databaseName: $"%{Constants.CosmosDatabaseEnvName}%",
containerName: $"%{Constants.SampleContainerNameEnvName}%",
Connection = $"{Constants.CosmosConnectionEnvName}",
LeaseContainerName = "leases",
CreateLeaseContainerIfNotExists = true)] IReadOnlyList<JObject> documents
)
...
预期结果
我期望静态常量类中的字符串值将解析为Azure应用程序配置中的键/值对.所以,举例来说,
public static class Constants
{
public const string CosmosDatabaseEnvName = "my_cosmos_database"
}
然后在Azure应用程序配置中
my_cosmos_database使用-actual-database-name作为值进行配置
应该使用the-acutal-database-name作为databaseName等的参数值.
实际效果
Function failed indexing <parameter> does not resolve to a value个
Azure Functions Worker数量:dotnet8-isolated Azure Functions版本:2.0
适用的Nuget套餐
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.20.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.AzureAppConfiguration" Version="7.0.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.CosmosDB" Version="4.5.0" />
我还验证了,如果我使用应用程序设置,配置是否正确读入.它在Azure应用程序配置中不起作用.