Значения конфигурации функций Azure недоступны в атрибутах функций.C#

Место общения программистов C#
Ответить
Anonymous
 Значения конфигурации функций Azure недоступны в атрибутах функций.

Сообщение Anonymous »

У меня есть функция Azure, работающая на портале Azure. Его конфигурация находится в ресурсе конфигурации, некоторые значения — в ресурсе хранилища ключей. Функция Azure была реализована в .NET 6 с внутрипроцессной моделью. Я перенес код в .NET 8, используя модель изолированного рабочего процесса.
Вот мой код Program.cs:

Код: Выделить всё

using System.Reflection;
using Azure.Identity;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;

namespace My.AzureFunctions
{
public class Program
{
public static void Main()
{
var host = new HostBuilder()
.ConfigureFunctionsWebApplication()
.ConfigureAppConfiguration(config =>
{
var builtConfig = config.Build();
var appConfigurationName = builtConfig

var defaultAzureCredentialOptions = new DefaultAzureCredentialOptions
{
ExcludeAzureCliCredential = false,
ExcludeAzurePowerShellCredential = true,
ExcludeEnvironmentCredential = false,
ExcludeManagedIdentityCredential = false,
ExcludeVisualStudioCodeCredential = true,
ExcludeVisualStudioCredential = true
};
config.AddAzureAppConfiguration(options =>
{
options.Connect(new Uri($"https://{appConfigurationName}.azconfig.io"),
new DefaultAzureCredential(defaultAzureCredentialOptions))
.ConfigureKeyVault(kvOptions =>
{
kvOptions.SetCredential(
new DefaultAzureCredential(defaultAzureCredentialOptions));
kvOptions.SetSecretRefreshInterval(TimeSpan.FromHours(1));
});
});
config.AddEnvironmentVariables();

foreach (var kvp in config.Build().AsEnumerable())
{
if (!string.IsNullOrEmpty(kvp.Value))
{
Environment.SetEnvironmentVariable(kvp.Key, kvp.Value);
}
}
})
.ConfigureServices((context, services) =>
{
// Bind configurations to options
// ...
})
.Build();

host.Run();
}
}
}
Функции выглядят следующим образом:

Код: Выделить всё

    [Function("TestTimerTrigger")]
public void TestTimerTrigger(
// This causes an error
[TimerTrigger("%TimeValue%)] TimerInfo timerInfo,
FunctionContext functionContext,
CancellationToken cancellationToken)
{
// Here TimeValue residing in Azure Configuration can be read.
_logger.LogInformation("TestTimerTrigger function executed with: {TimeValue}", _configuration["TimeValue"]);

// Also accessible here
_logger.LogInformation("TestTimerTrigger function executed with: {TimeValue}", Environment.GetEnvironmentVariable("TimeValue"));
}

[Function("MyEventTrigger")]
// The value cannot be read here, either.
public async Task Run([EventHubTrigger("", Connection = "MyEventHub:ConnectionString")] EventData[] messages,
FunctionContext functionContext)
{
// ...
}
Я получаю следующие ошибки:

Код: Выделить всё

The 'TestTimerTrigger' function is in error: Microsoft.Azure.WebJobs.Host: Error indexing method 'Functions.TestTimerTrigger'. Microsoft.Azure.WebJobs.Host: '%TimeValue%' does not resolve to a value.

Microsoft.Azure.WebJobs.Extensions.EventHubs: EventHub account connection string with name 'MyEventHub:ConnectionString' does not exist in the settings.  Make sure that it is a defined App Setting.
В старой функции внутрипроцессной модели .NET 6 я мог получить доступ к значениям конфигурации в атрибутах функции, но после изменения кода на .NET 8 и изолированной рабочей модели у меня есть описанная проблема. Сама конфигурация и способ доступа к ней не изменились. Что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/791 ... attributes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»