Я запускаю функцию Azure (V4) в .NET 7 в изолированном процессе. Все исключения отображаются в Azure Application Insights как RpcExceptions. Похоже, моя функция заключена в этот «Invoke» и может возвращать только RpcException вместо AppUserException, который я явно выбрасываю.
Это приводит к очень неясным данным. Что я могу сделать?
Я только что создал новую функцию, чтобы проверить ее:
пространство имен FunctionApp1 { публичный класс Function1 { частный ILogger только для чтения _logger; общедоступная функция1 (ILoggerFactory loggerFactory) { _logger = loggerFactory.CreateLogger(); } [Функция("Функция1")] public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, «get», «post»)] HttpRequestData req) { _logger.LogInformation("Триггерная функция HTTP C# обработала запрос."); выдать новое AppUserException("usererror"); } } }
program.cs
var хост = новый HostBuilder() .ConfigureFunctionsWorkerDefaults() .ConfigureAppConfiguration(builder => { // хранилище ключей вар keyVaultEndpoint = GetKeyVaultEndpoint(); если (string.IsNullOrWhiteSpace(keyVaultEndpoint)) { throw new Exception("keyVaultEndpoint не указан."); } вар учетные данные = новый DefaultAzureCredential(); builder.AddAzureKeyVault(new Uri(keyVaultEndpoint), учетные данные, новый KeyVaultSecretManager()); // Конфигурация приложения Azure вар azureAppConfigEndpoint = GetAzureAppConfigEndpoint(); если (string.IsNullOrWhiteSpace(azureAppConfigEndpoint)) { throw new Exception("azureAppConfigEndpoint не указан."); } builder.AddAzureAppConfiguration(параметры => { options.Connect(azureAppConfigEndpoint) .UseFeatureFlags(опции => { options.CacheExpirationInterval = TimeSpan.FromSeconds(60); }); }); builder.AddJsonFile("appsettings.json", необязательно: true); }) .ConfigureServices(услуги => { Services.AddApplicationInsightsTelemetryWorkerService(); Services.ConfigureFunctionsApplicationInsights(); Services.Configure(параметры => { var toRemove = options.Rules.FirstOrDefault(правило => rule.ProviderName == "Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider"); если (toRemove не равно нулю) { options.Rules.Remove(toRemove); } }); Services.AddSolutionServices(); }) .ConfigureLogging((hostingContext, logging) => { // Убедитесь, что конфигурация файла appsettings.json выбрана. logging.AddConfiguration(hostingContext.Configuration.GetSection("Ведение журнала")); }) .Строить(); статическая строка? GetKeyVaultEndpoint() => Environment.GetEnvironmentVariable("ASPNETCORE_HOSTINGSTARTUP__KEYVAULT__CONFIGURATIONVAULT"); статическая строка? GetAzureAppConfigEndpoint() => Environment.GetEnvironmentVariable("AZURE_APPCONFIG_ENDPOINT"); хост.Выполнить();