Динамическое обновление выражения TimeTrigger. Функции Azure. - PullRequest
0 голосов
/ 12 июня 2019

Пользователь вводит выражение CRON из интерфейса.Приложение-функция должно обновить настройки приложения, чтобы отразить ввод данных пользователем.

Мой текущий подход

Функция TimerTrigger с schedule appsetting

    [FunctionName("Cleanup")]
    public static async Task Run([TimerTrigger("%schedule%")]TimerInfo myTimer, ILogger log)
    {
        // Get the connection string from app settings and use it to create a connection.
        var str = Environment.GetEnvironmentVariable("db_connection");
        log.LogInformation($"db_connection : {str}");
    }

Настройка scheduleappsetting через переменную окружения

    [FunctionName("SetConfig")]
    public static async Task<HttpResponseMessage> SetConfig([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]HttpRequestMessage req)
    {
        HistoryLogDeleteConfigDto data = await req.Content.ReadAsAsync<HistoryLogDeleteConfigDto>();
        Environment.SetEnvironmentVariable("schedule", data.Schedule);

        return req.CreateResponse(HttpStatusCode.OK);
    }

local.settings.json file

"Values": {
"db_connection": "Server=DESKTOP-DFJ3PBT;Database=CovalentLogger;Trusted_Connection=True;MultipleActiveResultSets=true",
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"schedule": "*/20 * * * * *"
}       

Тело запроса POSTMAN для обновления schedule appsetting

{
"Schedule": "*/30 * * * * *"
}

Но не повезло,После отправки запроса от почтальона об обновлении настройки, если я получаю доступ к настройке приложения функции портала Azure, я все еще вижу старое значение.

Но если я запрашиваю переменную environmentmnet, как показано ниже Environment.GetEnvironmentVariable("schedule", EnvironmentVariableTarget.Process), я вижуновое выражение.Но в настройках приложения портала Azure он по-прежнему имеет прежнее значение.Таким образом, задание все еще выполняется по старому расписанию.

Где я ошибся?Спасибо

1 Ответ

1 голос
/ 12 июня 2019

Я не думаю, что такое обновление переменной среды будет работать, поскольку расписание читается только при инициализации функции или когда параметр приложения обновляется в службе приложения. Тем не менее, это все еще должно быть достаточно выполнимо. Это в основном именно то, что вы ищете: https://stackoverflow.com/a/50116234/1537195

Просто упакуйте это в свою функцию, запускаемую по протоколу HTTP (и я бы, вероятно, использовал Управляемая идентификация ), и вы готовы к работе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...