azure webjob- timerTrigger:获取当前执行上下文?

时间:2019-01-15 01:00:03

标签: asp.net-core-2.1 azure-webjobssdk azure-webjobs-triggered azure-webjobs-continuous timer-trigger

我写了一个带有timerTrigger的天蓝色webjob。静态方法每分钟都会调用一次,它必须发出http POST请求。我想在timerTrigger静态方法中访问appSettings.json文件。我该如何访问?

我看到一些示例,其中QueueTrigger的静态方法将ExecutionContext和TextWriter作为参数。请参见以下示例:

    public static void ProcessOrder(
    [QueueTrigger("orders")] Order order,
    TextWriter log,
    ExecutionContext context)
{
    log.WriteLine("InvocationId: {0}", context.InvocationId);
}

如何将类似的当前执行上下文和TextWriter记录器注入我的timerTrigger静态方法-“ TimerTick”? 下面是我的TimerTrigger静态方法:

        public class Test
        {
            private static IConfiguration _config;
            private static IHttpHandler _httpHandler;
            public Test(IConfiguration configuration, IHttpHandler httpHandler)
            {
                _config = configuration;
                _httpHandler = httpHandler;
            }

      [Singleton]
            public static void TimerTick([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer)
            {
                string baseUrl = _config?.GetSection("WebJobConfiguration:url")?.Value;
                string API = _config.GetSection("WebJobConfiguration:API")?.Value;
                Console.WriteLine("URL: " + baseUrl + API);
                _httpHandler.PostAsync(baseUrl + API, null);
            }
}

================================================ ======================== 更新问题:

我将具有TimerTrigger的方法更新为:

public async static Task TriggerNotification([TimerTrigger("%Job%")]TimerInfo myTimer, ExecutionContext context)
    {....}

使用NameResolver从配置文件读取%Job%。

当我尝试在TriggerNotification方法中传递当前执行上下文时,出现以下错误: enter image description here

我该如何解决?

使用JobBuilder配置Web作业。下面是代码。我正在使用Azure Webjob版本3.0.3。

 static void Main(string[] args)
    {
        try
        {
            var builder = new HostBuilder()
                    .ConfigureAppConfiguration(SetupConfiguration)
                    .ConfigureLogging(SetupLogging)
                    .ConfigureServices(SetupServices)
                    .ConfigureWebJobs(webJobConfiguration =>
                    {
                        webJobConfiguration.AddTimers();
                        webJobConfiguration.AddAzureStorageCoreServices(); 
                    })
                    .UseSerilog()
                .Build();
            builder.Run();
        } catch { ... }

}

1 个答案:

答案 0 :(得分:1)

  

我想访问timerTrigger中的appSettings.json文件   静态方法。我该如何访问?

我使用Microsoft.Extensions.Configuration.Json来实现它,在大多数情况下,我们使用此包在Json中配置设置。而且我尝试了将其用于读取json。这是完整的代码。您可以尝试一下。

public static void Run([TimerTrigger("0 */1 * * * *")] TimerInfo timer,
        ILogger logger)
    {
        logger.LogInformation("Doing some timely work ...");
        IConfigurationRoot configurationRoot = BuildConfiguration();
        string connectString= configurationRoot.GetSection("ConnectionStrings")["AzureWebJobsDashboard"];
        logger.LogInformation(connectString);


        // and other stuff .....
    }

    private static IConfigurationRoot BuildConfiguration()
    {
        var builder = new ConfigurationBuilder()
             .SetBasePath(Directory.GetCurrentDirectory())
             .AddJsonFile("appsettings.json");

        IConfigurationRoot configurationRoot = builder.Build();
        return configurationRoot;
    }

您可以在Logger中显示它。 enter image description here

对于ExecutionContext,您可以参考此wiki,也可以去官方doc,其中包含有关如何使用它的示例。

希望这对您有帮助,如果您还有其他问题,请告诉我。

更新:Program.cs图片。

enter image description here