Notificaciones de extracción de eventos de buzón utilizando EWS en Exchange

Obtenga información sobre cómo usar la API administrada de EWS o EWS para suscribirse a notificaciones de extracción y obtener eventos.

EWS en Exchange usa notificaciones de incorporación de cambios para permitir que los clientes soliciten (o extraigan) notificaciones sobre los cambios en el buzón desde el servidor al cliente.

Si se suscribe a las notificaciones de incorporación de cambios mediante la API administrada de EWS, se suscribe y obtiene notificaciones de extracción mediante el método SubscribeToPullNotifications . A continuación, se obtienen eventos del servidor mediante el método GetEvents .

Para suscribirse a notificaciones de incorporación de cambios mediante EWS, cree una suscripción mediante la operación Suscribirse, analice la respuesta y, a continuación, obtenga las notificaciones mediante la operación GetEvents.

Una vez que el cliente recibe notificaciones de elementos que se cambian o crean en el servidor, puede sincronizar los cambios.

Suscribirse a y obtener notificaciones de incorporación de cambios mediante la API administrada de EWS

En el ejemplo de código siguiente se muestra cómo usar el método SubscribeToPullNotifications para suscribirse a notificaciones de extracción para todos los eventos de la carpeta Bandeja de entrada. A continuación, en el ejemplo se usa el método GetEvents para recuperar eventos del servidor. En este ejemplo, se supone que el servicio es un enlace ExchangeService válido.

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

Después de recibir un evento del servidor, puede sincronizar esos cambios con el servidor. Use uno de los métodos de cancelación de suscripción especificados en Cómo cancelar la suscripción a las notificaciones? para finalizar la suscripción con el servidor cuando la suscripción ya no sea necesaria.

Suscribirse a notificaciones de incorporación de cambios mediante EWS

En el ejemplo siguiente se muestra la solicitud XML que se va a enviar al servidor para suscribirse a todos los EventTypes de la carpeta Bandeja de entrada mediante la operación Subscribe. Esta es también la solicitud XML que la API administrada de EWS envía al suscribirse a notificaciones de extracción mediante el método 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>

En el ejemplo XML siguiente se muestra el mensaje SubscribeResponse que se envía desde el servidor al cliente en respuesta a la solicitud de operación Subscribe . La inclusión del valor NoError para el elemento ResponseCode significa que la suscripción se creó correctamente. El elemento SubscriptionId identifica de forma única la suscripción de notificación de incorporación de cambios en el servidor. El elemento Watermark representa un marcador en la cola de eventos del buzón.

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

Después de crear la suscripción, ahora puede obtener eventos mediante el SubscriptionId que se devuelve en el mensaje SubscribeResponse .

Obtención de notificaciones de incorporación de cambios mediante EWS

En el ejemplo XML siguiente se muestra el mensaje de solicitud de operación GetEvents que se envía desde el cliente al servidor para obtener notificaciones para el SubscriptionId que se devuelve en el mensaje SubscribeResponse . Para la primera solicitud GetEvents , use la marca de agua devuelta en la respuesta Suscribirse . Para las solicitudes GetEvents posteriores, use la última marca de agua que se devolvió en la solicitud GetEvents anterior.

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

En el ejemplo XML siguiente se muestra el mensaje de respuesta GetEvents que se envía desde el servidor al cliente. Cada respuesta de GetEvents incluye información sobre uno o varios eventos. Se devuelve una marca de agua para cada evento. La última marca de agua debe guardarse y usarse en la siguiente solicitud GetEvents . Si no se ha producido ningún evento de almacén desde la última solicitud GetEvents , se devuelve un evento de estado.

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

Después de recibir un evento del servidor, sincronice los cambios con el cliente. Use la operación Cancelar suscripción para finalizar la suscripción con el servidor cuando la suscripción ya no sea necesaria.

Pasos siguientes

Después de recibir notificaciones, puede sincronizar la jerarquía de carpetas o sincronizar el contenido de la carpeta que ha cambiado.

Vea también