Уведомления по запросу о событиях почтовых ящиков с помощью веб-служб Exchange в ExchangePull notifications about mailbox events by using EWS in Exchange

Узнайте, как использовать управляемый API EWS или EWS, чтобы подписаться на уведомления и получать события.Find out how to use the EWS Managed API or EWS to subscribe to pull notifications and get events.

Службы EWS в Exchange используют Уведомления опрашивающей репликации, чтобы позволить клиентам запрашивать (или получать) уведомления об изменениях в почтовом ящике с сервера клиенту.EWS in Exchange uses pull notifications to enable clients to request (or pull) notifications about changes to the mailbox from the server to the client.

При подписке на уведомления по запросу с помощью управляемого API EWS вы можете подписаться на уведомления и получать их с помощью метода subscribetopullnotificationshttp .If you're subscribing to pull notifications by using the EWS Managed API, you subscribe to and get pull notifications by using the SubscribeToPullNotifications method. Затем вы получаете события с сервера с помощью метода Events .You then get events from the server by using the GetEvents method.

Чтобы подписаться на уведомления по запросу с помощью EWS, создайте подписку с помощью операции Subscribe, проанализируйте ответ, а затем получите уведомления с помощью операцииGetResponse.To subscribe to pull notifications by using EWS, you create a subscription by using the Subscribe operation, parse the response, and then get the notifications by using the GetEvents operation.

После того как клиент получит уведомления об элементах, которые были изменены или созданы на сервере, он сможет синхронизировать изменения.After the client receives notifications of items that are changed or created on the server, it can then synchronize the changes.

Подписаться на уведомления и получать уведомления по запросу с помощью управляемого API EWSSubscribe to and get pull notifications by using the EWS Managed API

В приведенном ниже примере кода показано, как использовать метод subscribetopullnotificationshttp , чтобы подписаться на уведомления для всех событий в папке "Входящие".The following code example shows how to use the SubscribeToPullNotifications method to subscribe to pull notifications for all events in the Inbox folder. Затем в примере используется метод Events для получения событий с сервера.The example then uses the GetEvents method to retrieve events from the server. В этом примере предполагается, что Служба является допустимой привязкой ExchangeService .In this example, we assume that service is a valid ExchangeService binding.

// 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(); 

После получения события с сервера вы можете синхронизировать эти изменения с сервером.After you receive an event from the server, you can synchronize those changes with the server. Используйте один из методов unsubscribe, указанных в разделе как отменить подписку на уведомления? , чтобы завершить подписку на сервер, если подписка больше не нужна.Use one of the unsubscribe methods specified in How do I unsubscribe to notifications? to end the subscription with the server when the subscription is no longer needed.

Подпишитесь на уведомления по запросу с помощью EWSSubscribe to pull notifications by using EWS

В следующем примере показан XML-запрос, который отправляется на сервер для подписки на все евенттипес в папке "Входящие" с помощью операции Subscribe.The following example shows the XML request to send to the server to subscribe to all EventTypes in the Inbox folder by using the Subscribe operation. Это также запрос XML, который управляемый API EWS отправляет при подписке на уведомления по запросу с помощью метода subscribetopullnotificationshttp .This is also the XML request that the EWS Managed API sends when subscribing to pull notifications by using the SubscribeToPullNotifications method.

<?xml version="1.0" encoding="utf-8"?>
<Subscribe xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PullSubscriptionRequest xmlns="https://schemas.microsoft.com/exchange/services/2006/messages">
    <FolderIds xmlns="https://schemas.microsoft.com/exchange/services/2006/types">
      <DistinguishedFolderId Id="inbox" />
    </FolderIds>
    <EventTypes xmlns="https://schemas.microsoft.com/exchange/services/2006/types">
            <EventType>NewMailEvent</EventType>
            <EventType>CreatedEvent</EventType>
            <EventType>DeletedEvent</EventType>
            <EventType>ModifiedEvent</EventType>
            <EventType>MovedEvent</EventType>
            <EventType>CopiedEvent</EventType>
            <EventType>FreeBusyChangedEvent</EventType>
    </EventTypes>
    <Timeout xmlns="https://schemas.microsoft.com/exchange/services/2006/types">30</Timeout>
  </PullSubscriptionRequest>
</Subscribe>

В следующем примере XML-кода показано сообщение субскрибереспонсе , которое отправляется от сервера клиенту в ответ на запрос операции Subscribe .The following XML example shows the SubscribeResponse message that is sent from the server to the client in response to the Subscribe operation request. Включение значения ошибки для элемента респонсекоде означает, что подписка была успешно создана.The inclusion of the NoError value for the ResponseCode element means that the subscription was created successfully. Элемент SubscriptionId однозначно идентифицирует подписку на уведомления по запросу на сервере.The SubscriptionId element uniquely identifies the pull notification subscription on the server. Элемент водяного знака представляет закладку в очереди событий почтового ящика.The Watermark element represents a bookmark in the mailbox event queue.

<?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="https://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>

После создания подписки можно получить события, используя значение SubscriptionId , которое возвращается в сообщении субскрибереспонсе .After creating the subscription, you can now get events by using the SubscriptionId that is returned in the SubscribeResponse message.

Получение уведомлений по запросу с помощью EWSGet pull notifications by using EWS

В следующем примере XML-кода показаны сообщение о запросе операции с событиями , которое отправляется с клиента на сервер для получения уведомлений для SubscriptionId , возвращаемых в сообщении субскрибереспонсе .The following XML example shows the GetEvents operation request message that is sent from the client to the server to get notifications for the SubscriptionId that is returned in the SubscribeResponse message. Для первого запроса на получение событий используйте водяной знак , возвращенный в ответе Subscribe .For the first GetEvents request, use the Watermark returned in the Subscribe response. Для последующих запросов к событиям используйте последний водяной знак , который был возвращен в предыдущих запросах Events .For subsequent GetEvents requests, use the last Watermark that was returned in the previous GetEvents request.

<?xml version="1.0" encoding="utf-8"?>
<GetEvents xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SubscriptionId xmlns="https://schemas.microsoft.com/exchange/services/2006/messages">d581ab79-a2ec-4653-9c8e-564d7cfc1d8c</SubscriptionId>
  <Watermark xmlns="https://schemas.microsoft.com/exchange/services/2006/messages">AAAAAGUhAAAAAAAAAQ==</Watermark>
</GetEvents>

В следующем примере XML-кода показаны ответные сообщения о событиях , отправляемые сервером клиенту.The following XML example shows the GetEvents response message that is sent from the server to the client. Каждый ответ на события содержит сведения о одном или нескольких событиях.Each GetEvents response includes information about one or more events. Для каждого события возвращается водяной знак .A Watermark is returned for each event. Последний водяной знак должен быть сохранен и использован в последующих запросах на событие .The last Watermark must be saved and used in the next GetEvents request. Если с момента последнего запроса на получение событий не было событий хранилища, возвращается событие Status.If no store events have occurred since the last GetEvents request, a status event is returned.

<?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="https://schemas.microsoft.com/exchange/services/2006/messages">
    <GetEventsResponseMessage ResponseClass="Success">
      <ResponseCode>NoError</ResponseCode>
      <Notification>
        <SubscriptionId xmlns="https://schemas.microsoft.com/exchange/services/2006/types">d581ab79-a2ec-4653-9c8e-564d7cfc1d8c</SubscriptionId>
        <PreviousWatermark xmlns="https://schemas.microsoft.com/exchange/services/2006/types">AAAAAGUhAAAAAAAAAQ==</PreviousWatermark>
        <MoreEvents xmlns="https://schemas.microsoft.com/exchange/services/2006/types">false</MoreEvents>
        <NewMailEvent xmlns="https://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>

После получения события с сервера синхронизируйте изменения, внесенные в клиент. Используйте операцию unsubscribe , чтобы завершить подписку на сервер, если подписка больше не нужна.Use the Unsubscribe operation to end the subscription with the server when the subscription is no longer needed.

Дальнейшие действияNext steps

После получения уведомлений можно синхронизировать иерархию папок или синхронизировать содержимое измененной папки.After you're received notifications, you can sync the folder hierarchy or sync the contents of the folder that changed.

См. такжеSee also