是否有计时器来更新适用于生产代码的Microsoft图形更改订阅

时间:2019-05-20 20:19:57

标签: azure azure-active-directory microsoft-graph microsoft-graph-sdks

我遵循链接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}";
}

但是我注意到计时器并不总是被触发的(例如:与网络相关的问题/在重新部署代码之后)。

是否有更好的方法来替换此计时器?

我听说过天蓝色的webjobs,是否可以用天蓝色的webjobs替换此计时器?如果可以的话,有人可以给我指出有关如何使用的文档吗?

1 个答案:

答案 0 :(得分:0)

我注意到您使用的是ASPNET,如果您使用的是ASPNETCORE版本,则从2.x开始,您可以获得每隔X个小时即可运行一次的后台服务以重新订阅(更新)订阅。这就是我们正在使用的(并且我们在Azure上)。我猜想webjobs可以解决问题,但我还没有使用过。您还可以使用一个外部服务,每隔X小时调用您的一个端点(例如CRON作业)。

希望这会有所帮助! JS