Azure Webjob 3.0-无法从计时器函数

时间:2019-04-23 09:35:01

标签: azure-webjobs azure-webjobssdk

我正在努力从Azure Webjob SDK 3.0项目中的appsettings.json文件读取任何变量。

我正在使用:

  • Microsoft.Azure.WebJobs.Core版本=“ 3.0.6”
  • Microsoft.Azure.WebJobs.Extensions version =“ 3.0.2”
  • Microsoft.Extensions.Configuration版本=“ 2.2.0”

我尝试了以下操作:

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

,但这返回null且无法读取。我已经检查了文档以及关于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 :(得分:0)

忽略此内容-仍无法正常工作

就想通了!在我的Functions类开始时对其进行初始化为我修复了此问题:

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函数父项下,应将每次运行细分为每个单独的运行。令人沮丧的是。

如果有人可以帮助,请告诉我。