Pullbenachrichtigungen zu Postfachereignissen mithilfe von EWS in Exchange

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

EWS in Exchange verwendet Pullbenachrichtigungen, um Clients das Anfordern (oder Pullen) von Benachrichtigungen über Änderungen am Postfach vom Server an den Client zu ermöglichen.

Wenn Sie Pullbenachrichtigungen mithilfe der verwalteten EWS-API abonnieren, abonnieren Sie Pullbenachrichtigungen mithilfe der SubscribeToPullNotifications-Methode und erhalten diese. Anschließend rufen Sie Mithilfe der GetEvents-Methode Ereignisse vom Server ab.

Um Pullbenachrichtigungen mithilfe von EWS zu abonnieren, erstellen Sie mithilfe des Subscribe-Vorgangsein Abonnement, analysieren die Antwort und rufen dann die Benachrichtigungen mithilfe des GetEvents-Vorgangs ab.

Nachdem der Client Benachrichtigungen über Elemente empfängt, die auf dem Server geändert oder erstellt wurden, kann er die Änderungen synchronisieren.

Abonnieren und Abrufen von Pullbenachrichtigungen mithilfe der verwalteten EWS-API

Im folgenden Codebeispiel wird gezeigt, wie Sie die SubscribeToPullNotifications-Methode verwenden, um Pullbenachrichtigungen für alle Ereignisse im Ordner Posteingang zu abonnieren. Im Beispiel wird dann die GetEvents-Methode verwendet, um Ereignisse vom Server abzurufen. In diesem Beispiel wird davon ausgegangen, dass der Dienst eine gültige ExchangeService-Bindung ist.

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

Nachdem Sie ein Ereignis vom Server erhalten haben, können Sie diese Änderungen mit dem Server synchronisieren. Verwenden Sie eine der in Gewusst wie Kündigen von Benachrichtigungen? angegebenen Abmeldemethoden, um das Abonnement mit dem Server zu beenden, wenn das Abonnement nicht mehr benötigt wird.

Abonnieren von Pullbenachrichtigungen mithilfe von EWS

Das folgende Beispiel zeigt die XML-Anforderung, die mithilfe des Subscribe-Vorgangs an den Server gesendet werden soll, um alle EventTypes im Ordner Posteingang zu abonnieren. Dies ist auch die XML-Anforderung, die die verwaltete EWS-API sendet, wenn Pullbenachrichtigungen mithilfe der SubscribeToPullNotifications-Methode abonniert werden.

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

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 Pullbenachrichtigungsabonnement auf dem Server eindeutig. Das Wasserzeichen-Element stellt ein Lesezeichen in der Postfachereigniswarteschlange dar.

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

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

Abrufen von Pullbenachrichtigungen mithilfe von EWS

Das folgende XML-Beispiel zeigt die Anforderungsnachricht des GetEvents-Vorgangs , die vom Client an den Server gesendet wird, um Benachrichtigungen für die SubscriptionId abzurufen, die in der SubscribeResponse-Nachricht zurückgegeben wird. Verwenden Sie für die erste GetEvents-Anforderung das in der Abonnentenantwort zurückgegebene Wasserzeichen. Verwenden Sie für nachfolgende GetEvents-Anforderungen das letzte Wasserzeichen , das in der vorherigen GetEvents-Anforderung zurückgegeben wurde.

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

Das folgende XML-Beispiel zeigt die GetEvents-Antwortnachricht , die vom Server an den Client gesendet wird. Jede GetEvents-Antwort enthält Informationen zu einem oder mehreren Ereignissen. Für jedes Ereignis wird ein Wasserzeichen zurückgegeben. Das letzte Wasserzeichen muss gespeichert und in der nächsten GetEvents-Anforderung verwendet werden. Wenn seit der letzten GetEvents-Anforderung keine Speicherereignisse aufgetreten sind, wird ein Statusereignis zurückgegeben.

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

Nachdem Sie ein Ereignis vom Server erhalten haben, synchronisieren Sie die Änderungen mit dem Client. 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