Подписки на уведомления, события почтовых ящиков и службы EWS в Exchange

Сведения о подписках на уведомления и событии почтовых ящиков в EWS в Exchange.

Чтобы подписаться на уведомления о событиях, возникающих в почтовом ящике или в одной или нескольких папках почтового ящика, можно использовать управляемый API EWS или веб-службы Exchange (EWS). Доступно три типа подписки: на потоковые уведомления, на уведомления по запросу и на push-уведомления. Каждый тип подписки использует собственные методы для получения уведомлений.

Какие уведомления выбрать?

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

Таблица 1. Типы подписки

Вариант Описание Насколько мне это подходит?
Потоковые уведомления
Уведомления, которые сервер отправляет через соединение, открытое в течение определенного периода времени.
Как правило, для большинства приложений рекомендуется использовать уведомления о потоковой передаче. Они похожи на уведомления по запросу и push-уведомления и предлагают лучшее из обоих миров. После создания подписки на уведомления подключение остается открытым в течение 30 минут, что позволяет серверу отправлять push-уведомления клиенту. Не нужно запрашивать обновления, как при подписке по запросу, и вам не нужно создавать приложение прослушивателя веб-службы, как с принудительной подпиской.
Уведомления по запросу
Уведомления, запрашиваемые или извлекаемые клиентом.
Уведомления по запросу больше подходят для слабо связанных клиентов, где клиент ненадежно подключен к сети. Эти уведомления могут создавать дополнительный трафик между клиентом и сервером, так как клиент отправляет частые запросы к серверу для получения уведомлений, не все из которых приносят результат.
Push-уведомления
Уведомления, отправляемые (или принудительно отправляемые) сервером в веб-службу на стороне клиента через адрес обратного вызова.
Как правило, push-уведомления обеспечивают меньшую задержку уведомлений, чем уведомления о вытягивании, и подходят для тесно связанных клиентов, к которым сервер имеет надежный доступ, а клиент доступен для IP-адреса. Тем не менее, push-уведомления не в пользу с появлением потоковых уведомлений в Exchange 2010. По возможности рекомендуется использовать потоковые уведомления вместо push-уведомлений в будущем. Для push-уведомлений требуется написать приложение-прослушиватель, куда отправляются уведомления. Это имеет небольшое преимущество по сравнению с уведомлениями о вытягивании в том, что оно сокращает проводной трафик, но увеличивает накладные расходы, требуя отдельного приложения.

На какие события служб EWS можно подписаться?

Типы событий служб EWS, на которые возможна подписка, определены в статьях "Перечисление EventType" для управляемого API EWS или "Элемент EventType" для служб EWS. Подписка доступна для следующих событий службы EWS:

Другой тип события EWS, событие Status, определяется элементом EventType , но вы не подписываетесь на это событие. Вместо этого он отправляется сервером для проверки состояния клиента только для потоковых и push-уведомлений. Клиент должен отреагировать на это событие, иначе время ожидания клиента истекает.

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

Рис. 1. Типы событий, возвращаемые подписками на уведомления

Таблица, в которой показаны уведомления, отправляемые пользователям в распространенных ситуациях, например при получении нового сообщения, создании новой папки, перемещении папок и т. д.

На рисунке 1 показан упрощенный процесс создания уведомления. На самом деле, для одного действия пользователя может быть создано несколько уведомлений (даже если они относятся к одному типу). Например, при переносе папки создается три события папки: одно для изменения папки, одно для бывшей родительской папки и еще одно для новой родительской папки. Так как для одной операции может быть создано несколько событий, мы рекомендуем при создании операции синхронизации задать время ожидания в несколько секунд, чтобы синхронизация происходила только после завершения операции.

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

Принципы работы уведомлений служб EWS

Уведомления служб EWS обрабатываются на основании подписки. Обычно на почтовый ящик приходится одна подписка, а в подписке на почтовый ящик можно подписаться на некоторые или все папки. Вы решаете, на какие уведомления следует подписаться (потоковая передача, вытягивание или отправка) и какие события вы хотите получать (NewMail, Created, Deleted, Modified и т. д.), а затем создать подписку. После этого сервер почтового ящика будет асинхронно отправлять клиенту события службы EWS. (Урок журнала: события синхронны в Exchange 2007, а события хранятся на сервере клиентского доступа в Exchange 2010, но не более!).

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

Потоковые уведомления служб EWS

Уведомления потоковой передачи зависят от зависания запроса на получение на сервере, чтобы сохранить подключение к потоковой подписке открытым, поэтому все события, возникающие во время активного подключения, немедленно передаются клиенту. В течение одного подключения можно отправить несколько уведомлений, и подключение остается открытым до истечения интервала или не более 30 минут. По истечении срока действия подключения клиент снова отправляет зависающую запрос на получение. На рисунке 2 показано, как работают подписки потоковой передачи и уведомления о потоковой передаче.

Рис. 2. Обзор потоковых уведомлений

Иллюстрация, показывающая принцип работы потоковых уведомлений. Чтобы настроить потоковые уведомления, сделайте следующее. 1. Оформите подписку. 2. Откройте соединение. 3. Дождитесь событий 4. Получите события, повторяйте шаги 3 и 4. 5. Закройте или оставьте соединение. 6. Отмените подписку или дождитесь, когда истечет срок ее действия.

Дополнительные сведения по созданию потоковых уведомлений см. в статье Потоковая передача уведомлений о событиях почтовых ящиков с помощью EWS в Exchange.

Уведомления по запросу служб EWS

Для получения уведомлений по запросу клиент запрашивает их через определенный, регулируемый им интервал. В результате могут приходить ответы GetEvents без уведомлений. На рисунке 3 показан принцип работы подписок и уведомлений по запросу.

Рис. 3. Обзор уведомлений по запросу

Иллюстрация, показывающая принцип работы pull-уведомлений. Чтобы настроить pull-уведомления, сделайте следующее. 1. Оформите подписку. 2. Отправьте события GetEvent. 3. Получив ответ, повторяйте пункты 2 и 3. 4. Закройте и оставьте соединение. 5. Отмените подписку или дождитесь, когда истечет срок ее действия.

Дополнительные сведения по созданию уведомлений по запросу см. в статье Уведомления по запросу о событиях почтовых ящиков с помощью веб-служб Exchange в Exchange.

Push-уведомления служб EWS

Push-уведомления зависят от того, что сервер отправляет уведомления обратно клиенту. Трафик доступен только при наличии уведомления. На рисунке 4 показано, как работают push-подписки и push-уведомления.

Рис. 4. Обзор push-уведомлений

Иллюстрация, показывающая принцип работы push-уведомлений. Чтобы настроить push-уведомления, сделайте следующее. 1. Создайте слушателя, 2. Оформите подписку. 3. Дождитесь событий. 4. Получите события. 5. Отправьте ответ

Если вы используете push-уведомления в Exchange 2010, рекомендуем перейти к использованию потоковых уведомлений в приложении, в этом случае вам не понадобится отдельное приложение для получения событий.

Как подписаться на уведомления?

Существует несколько вариантов подписки на уведомления в зависимости от типа подписки, который нужно создать.

Табл. 2. Методы подписки на уведомления и необходимые операции

Тип подписки Операция служб EWS Методы управляемого API EWS Действие
Подписка с потоковой передачей
Операции подписки
Метод ExchangeService.BeginSubscribeToStreamingNotifications
Метод ExchangeService.BeginSubscribeToStreamingNotificationsOnAllFolders
Метод ExchangeService.SubscribeToStreamingNotificationsOnAllFolders
Создает запрос подписки на потоковые уведомления.
Подписка по запросу
Операции подписки
Метод ExchangeService.BeginSubscribeToPullNotifications
Метод ExchangeService.BeginSubscribeToPullNotificationsOnAllFolders
Метод ExchangeService.SubscribeToPullNotifications
Метод ExchangeService.SubscribeToPullNotificationsOnAllFolders
Создает запрос подписки на уведомления по запросу.
Push-уведомление
Операции подписки
Перегруженный метод ExchangeService.BeginSubscribeToPushNotifications
Перегруженный метод ExchangeService.BeginSubscribeToPushNotificationsOnAllFolders
Перегруженный метод ExchangeService.SubscribeToPushNotifications
Перегруженный метод ExchangeService.SubscribeToPushNotificationsOnAllFolders
Создает запрос подписки на push-уведомления.

Как получить события служб EWS?

Способ отправки данных о фактических событиях зависит от типа созданной вами подписки.

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

Для уведомлений по запросу объект подписки инициализируется при создании подписки, поэтому для получения событий с сервера достаточно вызвать метод GetEvent или соответствующую операцию. Больше об этом можно узнать в статье Уведомления по запросу о событиях почтовых ящиков с помощью веб-служб Exchange в Exchange.

В таблице ниже перечислены операции и классы, необходимые для получения событий.

Табл. 3. Элементы и классы для создания соединения и получения событий

Тип подписки Операция служб EWS Метод управляемого API EWS Действие
Подписка с потоковой передачей
Операция GetStreamingEvents
Метод StreamingSubscriptionConnection.AddSubscription
Создает на сервере ожидающий запрос GET, ответ на который приходит при возникновении какого-либо события.
Подписка по запросу
Операция GetEvents
Метод PullSubscription.GetEvents
Получает с сервера уведомления по запросу.
Принудительная подписка
Не применимо.
Не применимо.
Push-уведомления автоматически отправляются на прослушиватель для веб-службы (URL-адрес обратного вызова указывается в запросе на подписку). Не требуется вызывать дополнительные методы или операции.

Как отменить подписку на уведомления?

В таблице ниже указаны способы отмены подписки на различные типы уведомлений.

Табл. 4. Методы отмены подписки на уведомления и необходимые операции

Тип подписки Службы EWS Управляемый API EWS
Подписка с потоковой передачей
Операция по отмене подписки
Метод StreamingSubscription.BeginUnsubscribe
Метод StreamingSubscription.EndUnsubscribe
Метод StreamingSubscription.Unsubscribe
Подписка по запросу
Операция по отмене подписки
Метод PullSubscription.BeginUnsubscribe
Метод PullSubscription.EndUnsubscribe
Метод PullSubscription.Unsubscribe
Push-уведомление
Верните значение Unsubscribe в элементе StatusFrequency элемента SendNotificationResponseMessage
Не применимо. Подождите, пока истечет время ожидания для подписки.

Вы также можете дождаться окончания времени ожидания для любой из подписок.

Табл. 5. Окончание времени ожидания для подписок

Тип подписки Значение времени ожидания в службах EWS Значение времени ожидания в управляемом API EWS Обработка времени ожидания
Подписка с потоковой передачей
Элемент ConnectionTimeout
параметр lifetime конструктора StreamingSubscriptionConnection
Для управляемого API EWS по истечении заданного значения времени ожидания запускается событие OnDisconnect. Если не вызван метод StreamingSubscriptionConnection.Open соединение прерывается.
Для служб EWS по истечении заданного значения времени ожидания сообщение GetUserConfigurationResponse возвращает для элемента ConnectionStatus значение "Закрыто".
Подписка по запросу
Элемент Timeout
Параметр timeout метода SubscribeToPullNotification
По истечении заданного значения времени ожидания сервер удаляет подписку.
Push-уведомление
Элемент StatusFrequency
параметр frequency метода SubscribeToPushNotification
Если сервер не получает ответ на push-уведомление или проверку состояния связи, он несколько раз пытается отправить уведомление, а затем прекращает отправку. Дополнительные сведения см. в статье StatusFrequency.

Можно ли ограничить подписки?

В локальном развертывании можно ограничить количество подписок для каждого пользователя с помощью параметра регулирования количества запросов EwsMaxSubscriptions политики регулирования. Эту политику можно применить как ко всем пользователям, так и выборочно к некоторым из них. Политику регулирования EwsMaxSubscriptions невозможно настроить для Exchange Online.

В этом разделе:

См. также