Streambenachrichtigungen zu Postfachereignissen mithilfe von EWS in Exchange

Erfahren Sie, wie Sie die verwaltete EWS-API oder EWS verwenden, um Streamingbenachrichtigungen zu abonnieren und Ereignisse abzurufen.

EWS in Exchange verwendet Streamingbenachrichtigungen, um Benachrichtigungen zu empfangen, die vom Server über eine Verbindung gesendet werden, die für einen bestimmten Zeitraum geöffnet bleibt.

Wenn Sie Streamingbenachrichtigungen mithilfe der verwalteten EWS-API abonnieren, abonnieren und erhalten Sie Streamingbenachrichtigungen mithilfe der SubscribeToStreamingNotifications-Methode . Anschließend erstellen Sie mithilfe des StreamingSubscriptionConnection-Objekts eine Verbindung mit dem Abonnement.

Um Streamingbenachrichtigungen mithilfe von EWS zu abonnieren, erstellen Sie mithilfe des Subscribe-Vorgangsein Abonnement, analysieren die Antwort und rufen dann die Streamingbenachrichtigungen mithilfe der Vorgangsanforderung GetStreamingEvents ab.

Nachdem der Client Benachrichtigungen über elemente empfängt, die auf dem Server geändert oder erstellt wurden, besteht der nächste Schritt darin, die Änderungen zu synchronisieren.

Abonnieren und Abrufen von Streamingbenachrichtigungen mithilfe der verwalteten EWS-API

Das folgende Codebeispiel zeigt, wie Sie die SubscribeToStreamingNotifications-Methode verwenden, um Streamingbenachrichtigungen für alle Ereignisse im Ordner Posteingang zu abonnieren. Anschließend wird eine Verbindung für das Abonnement erstellt, indem ein StreamingSubscriptionConnection-Objekt erstellt wird. In diesem Beispiel wird davon ausgegangen, dass der Dienst eine gültige ExchangeService-Bindung ist.

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

Nachdem Sie Ereignisse vom Server empfangen haben, besteht der nächste Schritt darin, diese Änderungen mit dem Server zu synchronisieren. Verwenden Sie eine der in Tabelle 4 aufgeführten Abmeldemethoden, um das Abonnement mit dem Server zu beenden, wenn das Abonnement nicht mehr benötigt wird.

Abonnieren von Streamingbenachrichtigungen mithilfe von EWS

Das folgende Beispiel zeigt eine XML-Anforderung, die vom Client an den Server gesendet wird, wenn der Client den Subscribe-Vorgang aufruft, um alle EventTypes im Ordner Posteingang zu abonnieren. Dies ist auch die XML-Anforderung, die die verwaltete EWS-API sendet, wenn Sie die SubscribeToStreamingNotifications-Methode verwenden, um Streamingbenachrichtigungen zu abonnieren.

<?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>

Das folgende XML-Beispiel zeigt die SubscribeResponse-Nachricht , die vom Server an den Client als Reaktion auf die Anforderung des Subscribe-Vorgangs gesendet wird. Die Einbeziehung des NoError-Werts für das ResponseCode-Element bedeutet, dass das Abonnement erfolgreich erstellt wurde. Das SubscriptionId-Element identifiziert das Streamingbenachrichtigungsabonnement auf dem Server eindeutig.

<?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>

Nachdem Sie das Abonnement erstellt haben, können Sie die gestreamten Ereignisse mithilfe der SubscriptionId abrufen, die in der SubscribeResponse-Nachricht zurückgegeben wird.

Abrufen von Streamingereignissen mithilfe von EWS

Das folgende XML-Beispiel zeigt die GetStreamingEvents-Vorgangsanforderungsnachricht , die der Client an den Server sendet, um Benachrichtigungen für die subscriptionId zu erhalten, die in der SubscribeResponse-Nachricht zurückgegeben werden. Die GetStreamingEvents-Vorgangsanforderung gibt an, dass die Verbindungslänge 30 Minuten beträgt.

<?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>

Das folgende XML-Beispiel zeigt die GetStreamingEventsResponse-Nachricht , die vom Server an den Client als Reaktion auf die GetStreamingEvents-Vorgangsanforderung gesendet wird. Sie enthält ein CreatedEvent und ein NewMailEvent für das Element sowie ein ModifiedEvent für den Ordner, die alle auftreten, wenn eine neue Nachricht empfangen wird.

<?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>

Nachdem Sie Ereignisse vom Server empfangen haben, besteht der nächste Schritt darin, diese Änderungen mit dem Server zu synchronisieren. Verwenden Sie den Vorgang Kündigen , um das Abonnement mit dem Server zu beenden, wenn das Abonnement nicht mehr benötigt wird.

Nächste Schritte

Nachdem Sie Benachrichtigungen erhalten haben, können Sie die Ordnerhierarchie synchronisieren oder den Inhalt des geänderten Ordners synchronisieren.

Siehe auch