Notifications de type pull concernant les événements de boîte aux lettres à l'aide de EWS dans Exchange

Découvrez comment utiliser l’API managée EWS ou EWS pour vous abonner aux notifications d’extraction et obtenir des événements.

EWS dans Exchange utilise des notifications de tirage pour permettre aux clients de demander (ou de tirer) des notifications sur les modifications apportées à la boîte aux lettres du serveur vers le client.

Si vous vous abonnez aux notifications de tirage à l’aide de l’API managée EWS, vous vous abonnez à et recevez des notifications de tirage à l’aide de la méthode SubscribeToPullNotifications . Vous obtenez ensuite les événements du serveur à l’aide de la méthode GetEvents .

Pour vous abonner aux notifications d’extraction à l’aide d’EWS, vous créez un abonnement à l’aide de l’opération s’abonner, analysez la réponse, puis obtenez les notifications à l’aide de l’opération GetEvents.

Une fois que le client reçoit des notifications d’éléments modifiés ou créés sur le serveur, il peut synchroniser les modifications.

S’abonner à et obtenir des notifications d’extraction à l’aide de l’API managée EWS

L’exemple de code suivant montre comment utiliser la méthode SubscribeToPullNotifications pour s’abonner aux notifications d’extraction pour tous les événements dans le dossier Boîte de réception. L’exemple utilise ensuite la méthode GetEvents pour récupérer des événements à partir du serveur. Dans cet exemple, nous supposons que le service est une liaison ExchangeService valide.

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

Après avoir reçu un événement du serveur, vous pouvez synchroniser ces modifications avec le serveur. Utilisez l’une des méthodes de désabonnement spécifiées dans Comment faire se désabonner des notifications ? pour mettre fin à l’abonnement auprès du serveur lorsque l’abonnement n’est plus nécessaire.

S’abonner aux notifications d’extraction à l’aide d’EWS

L’exemple suivant montre la demande XML à envoyer au serveur pour s’abonner à tous les EventTypes dans le dossier Boîte de réception à l’aide de l’opération Subscribe. Il s’agit également de la requête XML que l’API managée EWS envoie lors de l’abonnement aux notifications d’extraction à l’aide de la méthode 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>

L’exemple XML suivant montre le message SubscribeResponse envoyé du serveur au client en réponse à la demande d’opération Subscribe . L’inclusion de la valeur NoError pour l’élément ResponseCode signifie que l’abonnement a été créé avec succès. L’élément SubscriptionId identifie de façon unique l’abonnement aux notifications par extraction sur le serveur. L’élément Filigrane représente un signet dans la file d’attente des événements de boîte aux lettres.

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

Après avoir créé l’abonnement, vous pouvez maintenant obtenir des événements à l’aide de l’Id d’abonnement retourné dans le message SubscribeResponse .

Obtenir des notifications d’extraction à l’aide d’EWS

L’exemple XML suivant montre le message de demande d’opération GetEvents qui est envoyé du client au serveur pour obtenir des notifications pour l’SubscriptionId retourné dans le message SubscribeResponse . Pour la première requête GetEvents , utilisez le filigrane renvoyé dans la réponse S’abonner . Pour les requêtes GetEvents suivantes, utilisez le dernier filigrane retourné dans la demande GetEvents précédente.

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

L’exemple XML suivant montre le message de réponse GetEvents envoyé du serveur au client. Chaque réponse GetEvents inclut des informations sur un ou plusieurs événements. Un filigrane est retourné pour chaque événement. Le dernier filigrane doit être enregistré et utilisé dans la requête GetEvents suivante. Si aucun événement de magasin ne s’est produit depuis la dernière requête GetEvents , un événement d’état est retourné.

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

Après avoir reçu un événement du serveur, synchronisez les modifications avec le client. Utilisez l’opération De désabonnement pour mettre fin à l’abonnement auprès du serveur lorsque l’abonnement n’est plus nécessaire.

Étapes suivantes

Une fois les notifications reçues, vous pouvez synchroniser la hiérarchie des dossiers ou synchroniser le contenu du dossier qui a changé.

Voir aussi