Почему платформа Microsoft Graph API webhook не согласована при отправке уведомлений?

#microsoft-graph-api

Вопрос:

Я получаю и обрабатываю уведомления, но это крайне ненадежно. Чтобы нарисовать картину: Предположим, я перемещаю 10 электронных писем из папки «Удаленные» в Outlook в папку «Входящие». Подписавшись на удаленные и созданные обновления, вы ожидаете 20 уведомлений. В зависимости от вашей (казалось бы) «удачи», вместо этого вы получаете от 18 до 20 уведомлений. Таким образом, отсутствуют электронные письма, о которых крючок никогда не уведомляется.

Чтобы исправить это, я настроил веб-крючок жизненного цикла для пропущенных уведомлений. Это срабатывает только время от времени, когда сообщение не было отправлено, и единственным решением является выполнение полной синхронизации. Что противоречит идее наличия веб-крючка.

Кое — что из того, что я сделал:

  • Подтверждено, что уведомления не отправляются через аналитику приложений и журналы приложений
  • Настройте веб-справочник жизненного цикла, чтобы помочь выявить проблемы
  • Настройка рабочего регулирования и самообновляющихся подписок

На данный момент я склонен сказать, что структура работает не так, как задумывалось, но я с радостью докажу, что ошибаюсь.

Заранее спасибо за любую помощь.

Редактировать (функция не вызывается):

 [FunctionName("MessageNotificationHook")]  public async Tasklt;IActionResultgt; Run(  [HttpTrigger(AuthorizationLevel.Anonymous, "get", "delete", "post", "put", "patch", Route = null)] HttpRequest req,  [Queue(Routes.CommandQueue), StorageAccount("AzureWebJobsStorage")] ICollectorlt;ImportMailMessageCommandgt; queueOutput,  [Queue(Routes.CommandQueueDev), StorageAccount("AzureWebJobsStorage")] ICollectorlt;ImportMailMessageCommandgt; queueOutputDev)  {  var validationToken = req.Query["validationToken"];  if (!string.IsNullOrEmpty(validationToken))  {  logger.LogInformation($"[{LOGGING_TAG}] {validationToken}");  return new ContentResult { Content = validationToken, ContentType = "text/plain" };  }   logger.LogInformation($"[{LOGGING_TAG}] called.");  // _ = Task.Run(() =gt; ProcessNotification(queueOutput, queueOutputDev, req));   return new AcceptedResult();  }  

Комментарии:

1. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

2. Выполнено. Должно быть доступно для запуска с учетной записью хранения/эмулятором. Также можно удалить два выходных параметра, и тогда они будут пустыми.