EWS API - ошибка при воссоздании подписки на уведомления

При работе с подписями подписок на папки календарей Office365 я получаю много сообщений ErrorReadEventsFailed в запросе SendNotification. Эта ошибка по существу означает, что подписка больше не найдена, и сервер больше не должен ожидать новых уведомлений.

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

В Office365 служба AutoDiscovery кажется почти невозможной с комбинацией учетных записей службы OAuth2, поэтому я использовал https://outlook.office365.com/EWS/Exchange.asmx в качестве основной конечной точки EWS.

Однако, когда я пытаюсь создать новую подписку для конкретной папки календаря, я продолжаю получать общую ошибку 500 ErrorNoRespondingCASInDestinationSite:

Веб-службы Exchange в настоящее время недоступны для этого запроса, поскольку ни один из серверов клиентского доступа на целевом сайте не может обработать запрос.

Странная часть , это происходит только после получения начальной ошибки ErrorReadEventsFailed. Если я попробую снова, скажем, 30 секунд, запрос пройдет без проблем.

После некоторых исследований казалось, что большинству пользователей было полезно убедиться, что заголовок X-AnchorMailbox был правильно настроен для пользователя, который учетная запись службы хочет выдавать за себя. Я дважды проверил этот заголовок, и он действительно отправляется по запросу для повторной отправки.

Эта проблема может быть разрешена экспоненциальным отключающим решением или просто повторить X количество раз, пока запрос не пройдет. Мне кажется, что когда подписка становится "потерянной", службе O365 требуется время для изменения DNS сервера Exchange (это единственное, о чем я могу думать).

Любая помощь будет принята с благодарностью!

Ответ 1

Учитывая документацию по адресу: https://msdn.microsoft.com/en-us/library/office/dn458788(v=exchg.150).aspx

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

Вместо этого создайте новую подписку и сопоставьте свойства папок для поиска изменений контента, которые произошли между потерянной подпиской и новой подпиской. Расширенные свойства папок, которые мы рекомендуем вам проверить, это PR_LOCAL_COMMIT_TIME_MAX (0x670a0040) и PR_DELETED_COUNT_TOTAL (0x670b0003).

Вы можете сделать это, создав расширенное определение свойства. Я думаю, это может помочь вам!