我正在按照示例https://github.com/microsoftgraph/msgraph-training-changenotifications/blob/master/demos/03-track-changes/Controllers/NotificationController.cs来为azure dev Ops中的组更改设置通知。
上面的github示例使用Delta Query来获取最新更改。
我已经对上面链接中描述的实际项目进行了一些修改,因此我的代码中有一个发布端点,如下所示,
public async Task<ActionResult<string>> Post([FromQuery]string validationToken = null)
{
// handle validation
if (!string.IsNullOrEmpty(validationToken))
{
return Ok(validationToken);
}
// handle notifications
using (StreamReader reader = new StreamReader(Request.Body))
{
string content = reader.ReadToEnd();
var notifications = JsonConvert.DeserializeObject<Notifications>(content);
foreach (var notification in notifications.Items)
{
Console.WriteLine($"Received notification: '{notification.Resource}', {notification.ResourceData?.Id}");
}
}
// use deltaquery to query for all updates and do my stuff(eg:create an entry in database)
await CheckForUpdates(_deltaLink);
//when my stuff is completed get the latest deltalink and update the _deltaLink which is a static object
var newDeltaLink = await _deltaQueryService.GetLatestDeltaLink();
_deltaLink = newDeltaLink;
return Ok();
}
我的问题是,只有一个单独的更改时,此帖子才能正常运行,但是当到达该步骤之前几毫秒之内有多个帖子请求时
var newDeltaLink = await _deltaQueryService.GetLatestDeltaLink();
第二个请求进入并执行
await CheckForUpdates(_deltaLink);
两次,所以我得到了重复的组更改,因为在第一个请求之后deltaLink没有得到更新。
有没有一种方法可以管理发布请求,以便在更改增量链接后获得第二个发布请求? #
答案 0 :(得分:0)
由于您已经在处理中,因此无法告诉Microsoft Graph保留通知,因此对此操作的任何管理都必须在您的应用程序中进行。您可能有多种成功完成此操作的方法,但是想到的一种方法是: