Обработка ошибок, связанных с уведомлениями, в EWS в Exchange

Узнайте, как обрабатывать ошибки, связанные с уведомлениями, в приложениях, разрабатываемых с помощью управляемого API EWS или EWS в Exchange.

Если приложение подписывается на уведомления и получает уведомления, может потребоваться обрабатывать ошибки, связанные с уведомлениями. Эти ошибки можно обрабатывать во время выполнения или во время разработки приложения EWS.

Таблица 1. Ошибки, связанные с уведомлениями, и способы их обработки

Error Происходит при попытке... Обработать его с помощью...
ErrorExceededConnectionCount Откройте подключение, чтобы получить события, когда учетная запись достигла предела подключения открытых потоковых подключений.
  • Использование олицетворения для открытия подключений.
  • Использование меньшего количества подключений для получения событий. Увеличьте количество подписок в каждом подключении , используя сходство и разместив не более 200 идентификаторов подписок в одной группе. Затем одно и то же подключение можно использовать для получения событий для всей группы, уменьшая количество необходимых подключений.
  • Изменение значения HangingConnectionLimit в файле web.config для локальной среды Exchange, чтобы переопределить значение по умолчанию трех открытых подключений. Exchange Online имеет значение hangingConnectionLimit по умолчанию 10, что не настраивается.
ErrorExceededSubscriptionCount Создайте слишком много подписок. Параметр политики регулирования EwsMaxSubscriptions определяет максимальное количество подписок, которые может создать учетная запись.
ErrorInvalidSubscriptionRequest Создайте подписки для нескольких почтовых ящиков или нескольких папок из одного запроса. Создание подписки для одной общедоступной папки или одного почтового ящика в одном запросе.
ErrorInvalidWatermark Получение событий с помощью недопустимого водяного знака.
  • Проверка идентификатора подписки, возвращенного в предыдущем ответе.
  • Убедитесь, что вы отправляете идентификатор подписки для правильного объекта ExchangeService .
  • Создание новой подписки.
ErrorMissedNotificationEvents Получение событий, когда были пропущены некоторые предыдущие события. Сравнение свойств расширенных папок PR_LOCAL_COMMIT_TIME_MAX (0x670a) и PR_DELETED_COUNT_TOTAL (0x670b) для определения пропущенных изменений и создания новой подписки.
ErrorProxyRequestNotAllowed Подпишитесь на события для пользователя в пакетном запросе, почтовый ящик которого перемещен на другой сайт. Использование автообнаружения для повторного обнаружения ExternalEwsUrl или EwsPartnerUrl и создания новой подписки.
ErrorReadEventsFailed Получение событий из подписки, которые не удается найти. Использование автообнаружения для повторного обнаружения ExternalEwsUrl или EwsPartnerUrl и создания новой подписки.
ErrorServerBusy Превышение ограничений регулирования. Имейте в виду следующее, что касается регулирования:
  • Ограничение регулирования EwsMaxSubscriptions определяет максимальное количество подписок на уведомления по отправке, запросу или потоковой передаче, которые могут быть активны одновременно. Это значение подписок почтовых ящиков, а не количество отдельных подписок папок в подписке почтового ящика. Начиная с почтовых ящиков служб версий 14.16.0135 и 14.15.0057.000 почтовый ящик, размещенный в Exchange Online или Exchange Online в составе Office 365, может иметь до 20 подписок, а целевой локальный почтовый ящик Exchange 2013 может содержать до 5000 подписок.
  • Ограничение регулирования EwsMaxConcurrency определяет максимальное число активных запросов для непотоковых подключений и имеет значение по умолчанию 27.
  • Ограничение по умолчанию для открытых потоковых подключений — десять.
ErrorSubscriptionNotFound Получение событий для подписки, которую не удается найти. Возможно, срок действия подписки истек, процесс EWS может быть перезапущен или передана недопустимая подписка.
  • Проверка использования того же идентификатора подписки, который был возвращен в предыдущем ответе.
  • Убедитесь, что вы отправляете идентификатор подписки для правильного объекта ExchangeService .
  • Создание новой подписки.
ServiceLocalException Добавьте подписку в новую папку, когда подключение к подписке открыто в другой папке. Измените подписку на подписку на все папки в почтовом ящике, а не на определенную папку.
ServiceResponseException Получение событий для подписки, которая не может находиться в хранилище Exchange.
  • Проверка использования того же идентификатора подписки, который был возвращен в предыдущем ответе.
  • Убедитесь, что вы отправляете идентификатор подписки для правильного объекта ExchangeService .

Восстановление после потерянных подписок

Если подписка потеряна или больше не доступна, лучше создать новую подписку и не включать старый водяной знак в новую подписку. Повторное заполнение старым водяным знаком приводит к линейному сканированию событий, что является дорогостоящим. Вместо этого создайте новую подписку и сравните свойства папки, чтобы найти изменения содержимого, произошедшие между потерянной подпиской и новой подпиской. Свойства расширенных папок, которые рекомендуется проверять, PR_LOCAL_COMMIT_TIME_MAX (0x670a0040) и PR_DELETED_COUNT_TOTAL (0x670b0003). Это можно сделать, создав расширенное определение свойства.

См. также