Является ли таймер для обновления подписки на изменение графа Microsoft подходящим для производственного кода - PullRequest
0 голосов
/ 20 мая 2019

Я следую примеру в ссылке https://github.com/microsoftgraph/msgraph-training-changenotifications и создаю и обновляю подписку на уведомления, используя класс таймера.

[HttpGet]

public ActionResult<string> Get()
{
    var graphServiceClient = GetGraphClient();

    var sub = new Microsoft.Graph.Subscription();
    sub.ChangeType = "updated";
    sub.NotificationUrl = config.Ngrok + "/api/notifications";
    sub.Resource = "/users";
    sub.ExpirationDateTime = DateTime.UtcNow.AddMinutes(5);
    sub.ClientState = "SecretClientState";

    var newSubscription = graphServiceClient
        .Subscriptions
        .Request()
        .AddAsync(sub).Result;

    Subscriptions[newSubscription.Id] = newSubscription;

    if(subscriptionTimer == null)
    {
        subscriptionTimer = new Timer(CheckSubscriptions, null, 5000, 15000);
    }

    return $"Subscribed. Id: {newSubscription.Id}, Expiration: {newSubscription.ExpirationDateTime}";
}

Но я заметил, что таймер не всегда срабатывает (например, проблема, связанная с сетью / после нового развертывания кода).

Есть ли лучший способ заменить этот таймер?

Я слышал о веб-заданиях в Azure. Можно ли заменить этот таймер на веб-задания Azure? Если это так, может кто-нибудь указать мне какую-то документацию о том, как?

1 Ответ

0 голосов
/ 22 мая 2019

Я заметил, что вы используете ASPNET, если вы используете версию ASPNETCORE, начиная с 2.x, у вас могут быть фоновые службы, которые вы можете запускать каждые X часов для повторной подписки (обновления) подписок.Это то, что мы используем (и мы на Azure).Я бы предположил, что веб-задания могут помочь, но я еще не использовал их.У вас также может быть внешняя служба, которая вызывает одну из ваших конечных точек каждые X часов (например, работа CRON).

надеюсь, это поможет!JS

...