Уведомления по запросу о событиях почтовых ящиков с помощью веб-служб Exchange в Exchange
Узнайте, как использовать управляемый API EWS или EWS для подписки на уведомления о вытягивании и получения событий.
EWS в Exchange использует уведомления о вытягивании, чтобы клиенты могли запрашивать (или вытягивать) уведомления об изменениях почтового ящика с сервера клиенту.
Если вы подписываетесь на уведомления о вытягивании с помощью управляемого API EWS, вы подписываетесь на уведомления о вытягивании и получаете их с помощью метода SubscribeToPullNotifications . Затем вы получаете события с сервера с помощью метода GetEvents .
Чтобы подписаться на уведомления о вытягивании с помощью EWS, создайте подписку с помощью операции Подписка, анализируете ответ, а затем получаете уведомления с помощью операции GetEvents.
После того как клиент получает уведомления об измененных или созданных на сервере элементах, он может синхронизировать изменения.
Подписка и получение уведомлений о вытягивании с помощью управляемого API EWS
В следующем примере кода показано, как использовать метод SubscribeToPullNotifications для подписки на уведомления о вытягивании для всех событий в папке "Входящие". Затем в примере используется метод GetEvents для получения событий с сервера. В этом примере предполагается, что служба является допустимой привязкой ExchangeService .
// Subscribe to pull notifications in the Inbox.
PullSubscription subscription = service.SubscribeToPullNotifications(
new FolderId[] { WellKnownFolderName.Inbox }, 30, null,
EventType.NewMail, EventType.Created, EventType.Deleted,
EventType.Modified, EventType.Moved, EventType.Copied, EventType.FreeBusyChanged);
// Call GetEvents to retrieve events from the server.
GetEventsResults events = subscription.GetEvents();
После получения события с сервера можно синхронизировать эти изменения с сервером. Используйте один из методов отмены подписки, указанных в Разделы справки отменить подписку на уведомления? чтобы завершить подписку на сервере, когда подписка больше не нужна.
Подписка на уведомления о вытягивании с помощью EWS
В следующем примере показан XML-запрос для отправки на сервер для подписки на все EventTypes в папке "Входящие" с помощью операции Подписки. Это также XML-запрос, который управляемый API EWS отправляет при подписке на уведомления о вытягивании с помощью метода SubscribeToPullNotifications .
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange2016" />
</soap:Header>
<soap:Body>
<m:Subscribe>
<m:PullSubscriptionRequest>
<t:FolderIds xmlns="http://schemas.microsoft.com/exchange/services/2006/types">
<t:DistinguishedFolderId Id="inbox" />
</t:FolderIds>
<t:EventTypes>
<t:EventType>CopiedEvent</t:EventType>
<t:EventType>CreatedEvent</t:EventType>
<t:EventType>DeletedEvent</t:EventType>
<t:EventType>ModifiedEvent</t:EventType>
<t:EventType>MovedEvent</t:EventType>
<t:EventType>NewMailEvent</t:EventType>
</t:EventTypes>
<t:Timeout>5</t:Timeout>
</m:PullSubscriptionRequest>
</m:Subscribe>
</soap:Body>
</soap:Envelope>
В следующем xml-примере показано сообщение SubscribeResponse , которое отправляется с сервера клиенту в ответ на запрос операции подписки . Включение значения NoError для элемента ResponseCode означает, что подписка создана успешно. Элемент SubscriptionId однозначно идентифицирует подписку на уведомления о вытягивании на сервере. Элемент Watermark представляет закладку в очереди событий почтового ящика.
<?xml version="1.0" encoding="utf-8"?>
<SubscribeResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ResponseMessages xmlns="http//schemas.microsoft.com/exchange/services/2006/messages">
<SubscribeResponseMessage ResponseClass="Success">
<ResponseCode>NoError</ResponseCode>
<SubscriptionId>d581ab79-a2ec-4653-9c8e-564d7cfc1d8c</SubscriptionId>
<Watermark>AAAAAGUhAAAAAAAAAQ==</Watermark>
</SubscribeResponseMessage>
</ResponseMessages>
</SubscribeResponse>
После создания подписки вы можете получать события с помощью идентификатора подписки , возвращаемого в сообщении SubscribeResponse .
Получение уведомлений о вытягивании с помощью EWS
В следующем xml-примере показано сообщение запроса операции GetEvents , которое отправляется от клиента на сервер для получения уведомлений о Идентификаторе подписки , возвращенном в сообщении SubscribeResponse . Для первого запроса GetEvents используйте водяной знак , возвращенный в ответе Подписаться . Для последующих запросов GetEvents используйте последний водяной знак , возвращенный в предыдущем запросе GetEvents .
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange2016" />
</soap:Header>
<soap:Body>
<m:GetEvents>
<m:SubscriptionId>d581ab79-a2ec-4653-9c8e-564d7cfc1d8c</m:SubscriptionId>
<m:Watermark>AAAAAGUhAAAAAAAAAQ==</m:Watermark>
</m:GetEvents>
</soap:Body>
</soap:Envelope>
В следующем xml-примере показано ответное сообщение GetEvents , которое отправляется с сервера клиенту. Каждый ответ GetEvents содержит сведения об одном или нескольких событиях. Для каждого события возвращается подложка . Последняя подложка должна быть сохранена и использована в следующем запросе GetEvents . Если с момента последнего запроса GetEvents не возникало событий магазина, возвращается событие состояния.
<?xml version="1.0" encoding="utf-8"?>
<GetEventsResponseType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ResponseMessages xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
<GetEventsResponseMessage ResponseClass="Success">
<ResponseCode>NoError</ResponseCode>
<Notification>
<SubscriptionId xmlns="http://schemas.microsoft.com/exchange/services/2006/types">d581ab79-a2ec-4653-9c8e-564d7cfc1d8c</SubscriptionId>
<PreviousWatermark xmlns="http://schemas.microsoft.com/exchange/services/2006/types">AAAAAGUhAAAAAAAAAQ==</PreviousWatermark>
<MoreEvents xmlns="http://schemas.microsoft.com/exchange/services/2006/types">false</MoreEvents>
<NewMailEvent xmlns="http://schemas.microsoft.com/exchange/services/2006/types">
<Watermark>AAAAAHMhAAAAAAAAAQ==</Watermark>
<TimeStamp>2013-09-15T21:37:01Z</TimeStamp>
<ItemId Id="AAAtA=" ChangeKey="CQAAAA==" />
<ParentFolderId Id="AQAtAEFkbWA==" ChangeKey="AQAAAA==" />
</NewMailEvent>
</Notification>
</GetEventsResponseMessage>
</ResponseMessages>
</GetEventsResponse>
После получения события от сервера синхронизируйте изменения с клиентом. Используйте операцию Отмена подписки , чтобы завершить подписку на сервере, когда подписка больше не нужна.
Дальнейшие действия
После получения уведомлений можно синхронизировать иерархию папок или содержимое измененной папки.
См. также
Подписки на уведомления, события почтовых ящиков и службы EWS в Exchange
Потоковая передача уведомлений о событиях почтовых ящиков с помощью веб-служб Exchange в Exchange
Поддержание сходства между группой подписок и сервером почтовых ящиков в Exchange
Обработка ошибок, связанных с уведомлениями, в EWS в Exchange