#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. Выполнено. Должно быть доступно для запуска с учетной записью хранения/эмулятором. Также можно удалить два выходных параметра, и тогда они будут пустыми.