Потоковая передача уведомлений о событиях почтовых ящиков с помощью веб-служб Exchange в ExchangeStream 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 streaming notifications and get events.

Службы EWS в Exchange используют потоковые уведомления для получения уведомлений, отправляемых сервером через подключение, которое остается открытым в течение заданного периода времени.EWS in Exchange uses streaming notifications to receive notifications that are sent by the server through a connection that remains open for a specified period of time.

При подписке на потоковые уведомления с помощью управляемого API EWS вы можете подписываться и получать потоковые уведомления с помощью метода субскрибетостреамингнотификатионс .If you're subscribing to streaming notifications by using the EWS Managed API, you subscribe and get streaming notifications by using the SubscribeToStreamingNotifications method. Затем необходимо создать подключение к подписке с помощью объекта StreamingSubscriptionConnection .You then create a connection to the subscription by using the StreamingSubscriptionConnection object.

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

После того как клиент получит уведомления об изменении или создании элементов на сервере, следующим шагом будет синхронизация изменений.After the client receives notifications of items changed or created on the server, the next step is to synchronize the changes.

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

В приведенном ниже примере кода показано, как использовать метод субскрибетостреамингнотификатионс , чтобы подписаться на потоковые уведомления для всех событий в папке "Входящие".The following code example shows how to use the SubscribeToStreamingNotifications method to subscribe to streaming notifications for all events in the Inbox folder. Затем он создает подключение для подписки, создавая объект StreamingSubscriptionConnection .It then creates a connection for the subscription by creating a StreamingSubscriptionConnection object. В этом примере предполагается, что Служба является допустимой привязкой ExchangeService .In this example, we assume that service is a valid ExchangeService binding.

// Subscribe to streaming notifications in the Inbox. 
StreamingSubscription = service.SubscribeToStreamingNotifications(
    new FolderId[] { WellKnownFolderName.Inbox },
    EventType.NewMail,
    EventType.Created,
    EventType.Deleted,
    EventType.Modified,
    EventType.Moved,
    EventType.Copied,
    EventType.FreeBusyChanged);
// Create a streaming connection to the service object, over which events are returned to the client.
// Keep the streaming connection open for 30 minutes.
StreamingSubscriptionConnection connection = new StreamingSubscriptionConnection(service, 30);
connection.AddSubscription(StreamingSubscription);
connection.OnNotificationEvent += OnNotificationEvent;
connection.OnDisconnect += OnDisconnect;
connection.Open();

После получения событий от сервера следующий шаг — синхронизация этих изменений с сервером.After you have received events from the server, the next step is to synchronize those changes with the server. Используйте один из методов unsubscribe, перечисленных в таблице 4 , чтобы завершить подписку на сервер, если подписка больше не нужна.Use one of the unsubscribe methods listed in Table 4 to end the subscription with the server when the subscription is no longer needed.

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

В следующем примере показан XML-запрос, отправляемый клиентом серверу, когда клиент вызывает операцию Subscribe , чтобы подписаться на все Евенттипес в папке "Входящие".The following example shows an XML request that is sent by the client to the server when the client calls the Subscribe operation to subscribe to all EventTypes in the Inbox folder. Это также запрос XML, который отправляет управляемый API EWS при использовании метода субскрибетостреамингнотификатионс для подписки на потоковые уведомления.This is also the XML request that the EWS Managed API sends when you use the SubscribeToStreamingNotifications method to subscribe to streaming notifications.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2013" />
  </soap:Header>
  <soap:Body>
    <m:Subscribe>
      <m:StreamingSubscriptionRequest>
        <t:FolderIds>
          <t:DistinguishedFolderId Id="inbox" />
        </t:FolderIds>
        <t:EventTypes>
          <t:EventType>NewMailEvent</t:EventType>
          <t:EventType>CreatedEvent</t:EventType>
          <t:EventType>DeletedEvent</t:EventType>
          <t:EventType>ModifiedEvent</t:EventType>
          <t:EventType>MovedEvent</t:EventType>
          <t:EventType>CopiedEvent</t:EventType>
          <t:EventType>FreeBusyChangedEvent</t:EventType>
        </t:EventTypes>
      </m:StreamingSubscriptionRequest>
    </m:Subscribe>
  </soap:Body>
</soap:Envelope>

В следующем примере 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 streaming notification subscription on the server.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15"
                         MinorVersion="0"
                         MajorBuildNumber="785"
                         MinorBuildNumber="6"
                         Version="V2_6"
                         xmlns:h="https://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="https://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <m:SubscribeResponse xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
                         xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
          <m:SubscribeResponseMessage ResponseClass="Success">
            <m:ResponseCode>NoError</m:ResponseCode>
            <m:SubscriptionId>JgBibjFwcjAzbWIyMDIubmFtcHJkMDMucHJvZC5vdXRsb29rLmNvbRAAAADwXxVesOnHS5BxUHKwAW88SHjwd1iB0Ag=</m:SubscriptionId>
          </m:SubscribeResponseMessage>
        </m:ResponseMessages>
      </m:SubscribeResponse>
    </s:Body>
  </s:Envelope>

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

Получение потоковых событий с помощью EWSGet streaming events by using EWS

В следующем примере XML-кода показано сообщение запроса операции GetStreamingEvents , которое клиент отправляет на сервер для получения уведомлений для SubscriptionId , возвращенных в сообщении субскрибереспонсе .The following XML example shows the GetStreamingEvents operation request message that the client sends to the server to get notifications for the SubscriptionId returned in the SubscribeResponse message. Запрос операции GetStreamingEvents указывает, что длина подключения составляет 30 минут.The GetStreamingEvents operation request indicates that the length of the connection is 30 minutes long.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2013" />
  </soap:Header>
  <soap:Body>
    <m:GetStreamingEvents>
      <m:SubscriptionIds>
        <t:SubscriptionId>JgBibjFwcjAzbWIyMDIubmFtcHJkMDMucHJvZC5vdXRsb29rLmNvbRAAAADwXxVesOnHS5BxUHKwAW88SHjwd1iB0Ag=</t:SubscriptionId>
      </m:SubscriptionIds>
      <m:ConnectionTimeout>30</m:ConnectionTimeout>
    </m:GetStreamingEvents>
  </soap:Body>
</soap:Envelope>

В следующем примере XML-кода показано сообщение жетстреаминжевентсреспонсе , которое отправляется от сервера клиенту в ответ на запрос операции GetStreamingEvents .The following XML example shows the GetStreamingEventsResponse message that is sent from the server to the client in response to the GetStreamingEvents operation request. Он содержит Креатедевент и Невмаилевент для элемента, а также Модифиедевент для папки, что происходит при получении нового сообщения.It contains a CreatedEvent and a NewMailEvent for the item, and a ModifiedEvent for the folder, all of which occur when a new message is received.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15"
                         MinorVersion="0"
                         MajorBuildNumber="785"
                         MinorBuildNumber="6"
                         Version="V2_6"
                         xmlns:h="https://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="https://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
  </s:Header>
  <soap:Body xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <m:GetStreamingEventsResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                                xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types" 
                                xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages">
    <m:ResponseMessages>
      <m:GetStreamingEventsResponseMessage ResponseClass="Success">
        <m:ResponseCode>NoError</m:ResponseCode>
        <m:Notifications>
          <m:Notification>
            <t:SubscriptionId>JgBibjFwcjAzbWIyMDIubmFtcHJkMDMucHJvZC5vdXRsb29rLmNvbRAAAADwXxVesOnHS5BxUHKwAW88SHjwd1iB0Ag=</t:SubscriptionId>
            <t:CreatedEvent>
              <t:TimeStamp>2013-09-16T04:31:29Z</t:TimeStamp>
              <t:ItemId Id="AAMkADkzNjJjODUzLWZhMDMtNDVkMS05ZDdjLWVmMDlkYjQ1Zjc4MwBGAAAAAABSSWVKrmGUTJE+MVIvofglBwDZGACZQpSgSpyNkexYe2b7AAAAAAENAADZGACZQpSgSpyNkexYe2b7AAANGFYwAAA=" ChangeKey="CQAAAA==" />
              <t:ParentFolderId Id="AQMkADkzNjJjODUzLWZhMDMtNDVkMS05ZDdjLWVmMDlkYjQ1Zjc4MwAuAAADUkllSq5hlEyRPjFSL6H4JQEA2RgAmUKUoEqcjZHsWHtm+wAAAgENAAAA" ChangeKey="AQAAAA==" />
            </t:CreatedEvent>
            <t:NewMailEvent>
              <t:TimeStamp>2013-09-16T04:31:29Z</t:TimeStamp>
              <t:ItemId Id="AAMkADkzNjJjODUzLWZhMDMtNDVkMS05ZDdjLWVmMDlkYjQ1Zjc4MwBGAAAAAABSSWVKrmGUTJE+MVIvofglBwDZGACZQpSgSpyNkexYe2b7AAAAAAENAADZGACZQpSgSpyNkexYe2b7AAANGFYwAAA=" ChangeKey="CQAAAA==" />
              <t:ParentFolderId Id="AQMkADkzNjJjODUzLWZhMDMtNDVkMS05ZDdjLWVmMDlkYjQ1Zjc4MwAuAAADUkllSq5hlEyRPjFSL6H4JQEA2RgAmUKUoEqcjZHsWHtm+wAAAgENAAAA" ChangeKey="AQAAAA==" />
            </t:NewMailEvent>
            <t:ModifiedEvent>
              <t:TimeStamp>2013-09-16T04:31:29Z</t:TimeStamp>
              <t:FolderId Id="AQMkADkzNjJjODUzLWZhMDMtNDVkMS05ZDdjLWVmMDlkYjQ1Zjc4MwAuAAADUkllSq5hlEyRPjFSL6H4JQEA2RgAmUKUoEqcjZHsWHtm+wAAAgENAAAA" ChangeKey="AQAAAA==" />
              <t:ParentFolderId Id="AQMkADkzNjJjODUzLWZhMDMtNDVkMS05ZDdjLWVmMDlkYjQ1Zjc4MwAuAAADUkllSq5hlEyRPjFSL6H4JQEA2RgAmUKUoEqcjZHsWHtm+wAAAgEJAAAA" ChangeKey="AQAAAA==" />
              <t:UnreadCount>1</t:UnreadCount>
            </t:ModifiedEvent>
          </m:Notification>
        </m:Notifications>
      </m:GetStreamingEventsResponseMessage>
    </m:ResponseMessages>
  </m:GetStreamingEventsResponse>
</soap:Body>

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

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

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

См. такжеSee also