Azure Webjob 3.0 - невозможно прочитать переменную конфигурации из appsettings.json в функции таймера - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь прочитать любые переменные из моего файла appsettings.json в проекте Azure Webjob SDK 3.0.

Я использую:

  • Microsoft.Azure.WebJobs.Core version = "3.0.6"
  • Microsoft.Azure.WebJobs.Extensions version = "3.0.2 "
  • Microsoft.Extensions.Configuration version =" 2.2.0 "

Я пробовал следующее:

System.Configuration.ConfigurationManager.AppSettings["ApiUrl"]

, но это возвращает нольи не умеет читать.Я проверил документацию и другие вопросы по SO, но сейчас это похоже на поиск иголки в стоге сена.

Program.cs

static async Task Main(string[] args)
        {
            var builder = new HostBuilder()
                        .ConfigureWebJobs(b =>
                        {
                            b.AddAzureStorageCoreServices()                    
                            .AddAzureStorage()
                            .AddTimers();

                            b.UseHostId(Environment.UserName.ToLowerInvariant());
                        })
                        .ConfigureAppConfiguration((b, c)=>
                        {
                            var env = b.HostingEnvironment;
                            c.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
                            c.AddCommandLine(args);
                            c.AddEnvironmentVariables();
                            c.Build();
                        })
                        .ConfigureLogging((context, b) =>
                        {
                            b.SetMinimumLevel(LogLevel.Debug);
                            b.AddConsole();

                            string appInsightsKey = context.Configuration["APPINSIGHTS_INSTRUMENTATIONKEY"];
                            if (!string.IsNullOrEmpty(appInsightsKey))
                            {
                                b.AddApplicationInsights(o => o.InstrumentationKey = appInsightsKey);
                            }
                        })
                        .UseConsoleLifetime();

            var host = builder.Build();
            using (host)
            {
                await host.RunAsync();
            }
        }

Functions.cs

public static async Task ProcessAsync([TimerTrigger("0 */3 * * * *")] TimerInfo timerInfo, ILogger log)
{
   //I want to read my appsettings.json here!
}

appsettings.json пример:

{
  "AzureWebJobsDashboard": "################",
  "AzureWebJobsStorage": "################",
  "ApiUrl": "#############",
  "APPINSIGHTS_INSTRUMENTATIONKEY": "############"
}

1 Ответ

0 голосов
/ 23 апреля 2019

игнорировать это - все еще не работает

Просто разобрался!Инициализация этого в начале моего класса функций исправила это для меня:

private readonly IConfiguration _configuration;
public Functions(IConfiguration configuration)
{
    _configuration = configuration;
}

public static async Task ProcessAsync([TimerTrigger("0 */3 * * * *")] TimerInfo timerInfo, ILogger log)
{
   var conf = _configuration["ApiUrl"];
}

Это работает, но заставляет WebJob работать как одна функция.Каждый прогон должен разбиваться на каждый отдельный прогон в родительской функции WebJob в журналах.Невероятно расстраивает.

Если кто-нибудь может помочь, пожалуйста, дайте мне знать.

...