azure webjob- timerTrigger: получить текущий контекст выполнения? - PullRequest
0 голосов
/ 15 января 2019

Я написал лазурное веб-задание, в котором есть timerTrigger. Статический метод вызывается каждую минуту, и он должен сделать запрос HTTP POST. Я хочу получить доступ к файлу appSettings.json в статическом методе timerTrigger. Как я могу получить к нему доступ?

Я вижу примеры, когда статический метод для 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)
    {....}

Чтение% Job% из файла конфигурации с использованием NameResolver.

Когда я пытаюсь передать текущий контекст выполнения в методе TriggerNotification, я получаю следующую ошибку: enter image description here

Как мне это решить?

Веб-работа настраивается с помощью HostBuilder. Ниже приведен код. Я использую 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 голосов
/ 16 января 2019

Я хочу получить доступ к файлу appSettings.json в timerTrigger статический метод. Как я могу получить к нему доступ?

Я использовал 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, вы можете обратиться к этой вики или перейти к официальному doc , там есть примеры того, как его использовать.

Надеюсь, это поможет вам, если у вас остались другие вопросы, пожалуйста, дайте мне знать.

Обновление: рис. Program.cs

enter image description here

...