Efetuar pull de notificações sobre eventos de caixa de correio usando o EWS no Exchange
Descubra como usar a API Gerenciada do EWS ou o EWS para assinar notificações por pull e obter eventos.
O EWS no Exchange usa notificações por pull para permitir que os clientes solicitem (ou puxem) notificações sobre alterações na caixa de correio do servidor para o cliente.
Se você estiver assinando notificações por pull usando a API Gerenciada do EWS, assine e obtenha notificações por pull usando o método SubscribeToPullNotifications . Em seguida, você obtém eventos do servidor usando o método GetEvents .
Para assinar notificações por pull usando o EWS, crie uma assinatura usando a operação Assinar, analise a resposta e obtenha as notificações usando a operação GetEvents.
Depois que o cliente receber notificações de itens que são alterados ou criados no servidor, ele poderá sincronizar as alterações.
Assinar e obter notificações por pull usando a API Gerenciada do EWS
O exemplo de código a seguir mostra como usar o método SubscribeToPullNotifications para assinar notificações pull para todos os eventos na pasta Caixa de Entrada. Em seguida, o exemplo usa o método GetEvents para recuperar eventos do servidor. Neste exemplo, supomos que o serviço seja uma associação válida do ExchangeService .
// 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();
Depois de receber um evento do servidor, você pode sincronizar essas alterações com o servidor. Usar um dos métodos de cancelamento de assinatura especificados em Como fazer cancelar a assinatura de notificações? para encerrar a assinatura com o servidor quando a assinatura não for mais necessária.
Assinar notificações por pull usando o EWS
O exemplo a seguir mostra a solicitação XML para enviar ao servidor para assinar todos os EventTypes na pasta Caixa de Entrada usando a operação Assinar. Essa também é a solicitação XML que a API Gerenciada do EWS envia ao assinar notificações pull usando o 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>
O exemplo XML a seguir mostra a mensagem SubscribeResponse enviada do servidor para o cliente em resposta à solicitação de operação Assinar . A inclusão do valor NoError para o elemento ResponseCode significa que a assinatura foi criada com êxito. O elemento SubscriptionId identifica exclusivamente a assinatura de notificação pull no servidor. O elemento Watermark representa um indicador na fila de eventos da caixa de correio.
<?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>
Depois de criar a assinatura, agora você pode obter eventos usando o SubscriptionId retornado na mensagem SubscribeResponse .
Obter notificações por pull usando o EWS
O exemplo XML a seguir mostra a mensagem de solicitação de operação GetEvents enviada do cliente para o servidor para obter notificações para o SubscriptionId que é retornado na mensagem SubscribeResponse . Para a primeira solicitação GetEvents , use a Marca d'água retornada na resposta Assinar . Para solicitações getEvents subsequentes , use a última marca d'água que foi retornada na solicitação 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>
O exemplo XML a seguir mostra a mensagem de resposta GetEvents enviada do servidor para o cliente. Cada resposta getEvents inclui informações sobre um ou mais eventos. Uma marca d'água é retornada para cada evento. A última marca d'água deve ser salva e usada na próxima solicitação GetEvents . Se nenhum evento de repositório tiver ocorrido desde a última solicitação GetEvents , um evento de status será retornado.
<?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>
Depois de receber um evento do servidor, sincronize as alterações no cliente. Use a operação Cancelar assinatura para encerrar a assinatura com o servidor quando a assinatura não for mais necessária.
Próximas etapas
Depois de receber notificações, você pode sincronizar a hierarquia de pastas ou sincronizar o conteúdo da pasta alterada.
Confira também
Assinaturas de notificação, eventos de caixa de correio e EWS no Exchange
Transmitir notificações sobre eventos de caixa de correio usando o EWS no Exchange
Manter afinidade entre um grupo de assinaturas e o servidor de caixa de correio no Exchange
Manipulação de erros relacionados a notificações no EWS no Exchange