Assinaturas de notificação, eventos de caixa de correio e EWS no Exchange

Saiba mais sobre assinaturas de notificação e evento de caixa de correio do EWS no Exchange.

Você pode usar a API Gerenciada do EWS e os Serviços Web do Exchange (EWS) para assinar a fim de receber notificações quando ocorrerem eventos em uma caixa de correio ou em uma ou mais pastas de uma caixa de correio. Há três tipos de assinatura disponíveis: notificações de streaming, notificações por pull e notificações por push. Cada um desses tipos de assinatura usa técnicas diferentes para receber ou recuperar as notificações.

Obtendo notificações – quais são as minhas opções?

O EWS inclui três tipos de assinatura que funcionam independentemente para notificar o cliente sobre alterações no servidor. Não importa o tipo de assinatura que você escolher, você terá acesso aos mesmos eventos de notificação no final - é apenas uma questão de como você os obtém.

Tabela 1. Tipos de assinatura

Opção Descrição É ideal para mim?
Notificações de streaming
Notificações enviadas pelo servidor por meio de uma conexão que permanece aberta por um determinado período de tempo.
As notificações de streaming geralmente são recomendadas para a maioria dos aplicativos. Elas são semelhantes às notificações por push e pull e oferecem o melhor dos dois mundos. Depois de estabelecer sua assinatura de notificação, a conexão permanece aberta por até 30 minutos para permitir que o servidor envie notificações de volta para o cliente. Não há necessidade de solicitar atualizações, como faria com uma assinatura pull, e você não precisa criar um aplicativo ouvinte de serviço Web como faria com uma assinatura push.
Notificações por pull
Notificações que são solicitadas (ou extraídas) pelo cliente.
As notificações por pull são geralmente mais apropriadas para clientes com acoplamento inflexível, onde o cliente não está conectado de forma confiável à rede. As notificações por pull podem criar tráfego excessivo entre o cliente e o servidor porque o cliente envia solicitações frequentes ao servidor para recuperar notificações e nem todas as solicitações resultam em notificações recuperadas.
Notificações por push
Notificações que são enviadas (ou empurradas) pelo servidor para um serviço Web do lado do cliente por meio de um endereço de retorno de chamada.
Geralmente, as notificações por push fornecem latência de notificação menor do que as notificações por pull e são adequadas para clientes com acoplamento rígido aos quais o servidor tem acesso confiável e o cliente é endereçável por IP. No entanto, as notificações por push caíram em desuso desde o surgimento das notificações de streaming no Exchange 2010. Se possível, recomendamos que use as notificações de streaming em vez de notificações por push daqui para frente. As notificações por push exigem a criação de um aplicativo ouvinte, que é para onde as notificações são enviadas. Isso tem um pequeno benefício em relação às notificações por pull, pois reduz o tráfego de rede, mas adiciona sobrecarga ao exigir um aplicativo separado.

Quais eventos do EWS posso assinar?

Os tipos de eventos do EWS que os clientes assinam são definidos pela enumeração EventType para a API gerenciada do EWS ou pelo elemento EventType para o EWS. Os seguintes eventos EWS estão disponíveis para assinatura:

Outro tipo de evento do EWS, o evento Status, é definido pelo elemento EventType, mas você não assina esse evento. Em vez disso, ele é enviado pelo servidor para verificar o status do cliente apenas para streaming e notificações por push. O cliente deve responder a este evento ou o cliente atingirá o tempo limite.

Uma única ação do usuário geralmente resulta na criação de várias notificações. Para ilustrar isso, a figura a seguir mostra alguns cenários comuns e as notificações criadas para cada um deles. As configurações do cliente têm um impacto nas notificações recebidas, então essa não é uma lista completa de todas as opções de configuração e notificações resultantes.

Figura 1. Tipos de eventos retornados por assinaturas de notificação

Uma tabela que mostra as notificações enviadas em situações comuns do usuários, como recebimento de novos emails, criação de uma nova pasta, movimentação de uma pasta e assim por diante.

A Figura 1 simplifica o processo de notificação. Na verdade, várias notificações (até mesmo diversas notificações do mesmo tipo) podem ser criadas para uma única ação do usuário. Por exemplo, no caso de uma operação de movimentação de pasta, são criados três eventos de pasta: um para a pasta sendo modificada, um para a pasta pai antiga e outro para a nova pasta pai. Como vários eventos podem ser disparados em uma única operação, recomendamos que você compile o tempo de espera de alguns segundos em suas operações de sincronização, de modo que só sincronize quando a ação for concluída, em vez de no meio da operação.

Também é importante observar que as definições de configuração que cada usuário escolhe afetarão as notificações criadas. Por exemplo, os dados de disponibilidade de alguns usuários são atualizados automaticamente e o evento FreeBusyChanged é criado quando uma nova solicitação de reunião é recebida, mesmo antes de ler o item. Para outros usuários, os dados de disponibilidade não são atualizados e o evento FreeBusyChanged não é criado até que a reunião seja aceita. Essas configurações podem ter um impacto considerável nas notificações criadas pelo servidor.

Como funcionam as notificações do EWS?

As notificações do EWS são tratadas de acordo com a assinatura. Normalmente, há uma assinatura por caixa de correio e, na assinatura da caixa de correio, você pode assinar algumas ou todas as pastas. Você decide que tipo de notificação deseja assinar (streaming, pull ou push) e que tipo de eventos deseja receber (NewMail, Criado, Excluído, Modificado, etc.) e, em seguida, cria uma assinatura. Os eventos do EWS são então enviados de forma assíncrona do servidor de caixa de correio para o cliente. (Lição do histórico: os eventos são síncronos no Exchange 2007 - e os eventos são armazenados no servidor de Acesso para Cliente no Exchange 2010, mas não mais!).

Dependendo do tipo de assinatura que você possui, as formas como as notificações são enviadas ao cliente variam. Esta seção descreve como cada tipo de assinatura funciona com mais detalhes.

Notificações de streaming do EWS

As notificações de streaming dependem de uma solicitação get deslocada no servidor para manter uma conexão de assinatura de streaming aberta, de modo que quaisquer eventos que ocorram enquanto a conexão estiver ativa sejam transmitidos ao cliente imediatamente. Várias notificações podem ser enviadas durante uma conexão simples, e a conexão permanece aberta até que o intervalo expire ou por, no máximo, 30 minutos. Após a conexão expirar, o cliente envia a solicitação get deslocada novamente. A Figura 2 mostra como as assinaturas de streaming e as notificações de streaming funcionam.

Figura 2. Visão geral da notificação de streaming

Uma ilustração que mostra como as notificações de streaming funcionam. Para configurar notificações de streaming: 1. Assine, 2. Abra a conexão, 3. Espere por eventos, 4. Receba eventos, repita 3 e 4, 5. Feche ou mantenha a conexão, 6. Cancele a assinatura ou o tempo limite.

Para saber mais sobre a criação de notificações de streaming, confira Transmitir notificações sobre eventos de caixa de correio usando o EWS no Exchange..

Notificações por pull do EWS

As notificações por pull dependem do cliente solicitar as notificações em um intervalo gerenciado pelo cliente. Isso pode resultar em respostas GetEvents sem notificações. A Figura 3 mostra como as assinaturas pull e as notificações por pull funcionam.

Figura 3. Visão geral da notificação por pull

Uma ilustração que mostra como as notificações por pull funcionam. Para configurar as notificações por pull: 1. Assine, 2. Envie GetEvents, 3. Receba resposta, repita 2 e 3, 4. Feche ou mantenha a conexão, 5. Cancele a assinatura ou o tempo limite.

Para saber mais sobre a criação de notificações por pull, confira Efetuar pull de notificações sobre eventos de caixa de correio usando o EWS no Exchange..

Notificações por push do EWS

As notificações por push contam com o servidor enviando notificações de volta ao cliente. Só há tráfego se houver uma notificação. A Figura 4 mostra como a assinatura push e as notificações por push funcionam.

Figura 4. Visão geral da notificação por push

Uma ilustração que mostra como as notificações por push funcionam. Para configurar as notificações por push: 1. Crie o ouvinte, 2. Assine, 3. Aguarde eventos, 4. Receba eventos, 5. Envie resposta "OK", repita 3, 4 e 5, 6. Cancele a inscrição ou o tempo limite.

Se você estiver usando as notificações por push com o Exchange 2010, considere atualizar seu aplicativo para usar notificações de streaming, para que você não precise de um aplicativo separado para receber os eventos.

Como assino as notificações?

Dependendo do tipo de assinatura que deseja criar, você tem várias opções de escolha para assinar as notificações.

Tabela 2. Operações e métodos para assinar notificações

Tipo de assinatura Operação do EWS Métodos da API Gerenciada do EWS Função
Streaming
Operação de assinatura
Método ExchangeService.BeginSubscribeToStreamingNotifications
Método ExchangeService.BeginSubscribeToStreamingNotificationsOnAllFolders
Método ExchangeService.SubscribeToStreamingNotificationsOnAllFolders
Cria uma solicitação para assinar as notificações de streaming.
Efetuar pull
Operação de assinatura
Método ExchangeService.BeginSubscribeToPullNotifications
Método ExchangeService.BeginSubscribeToPullNotificationsOnAllFolders
Método ExchangeService.SubscribeToPullNotifications
Método ExchangeService.SubscribeToPullNotificationsOnAllFolders
Cria uma solicitação para assinar as notificações por pull.
Enviar por push
Operação de assinatura
Método de sobrecarga ExchangeService.BeginSubscribeToPushNotifications
Método de sobrecarga ExchangeService.BeginSubscribeToPushNotificationsOnAllFolders
Método de sobrecarga ExchangeService.SubscribeToPushNotifications
Método de sobrecarga ExchangeService.SubscribeToPushNotificationsOnAllFolders
Cria uma solicitação para assinar as notificações por push.

Como obtenho os eventos do EWS?

Depois de criar a assinatura, a maneira como os eventos reais serão enviados ao cliente dependerá do tipo de assinatura.

Para notificações de streaming, uma conexão de assinatura de streaming deve ser criada e, em seguida, a assinatura será adicionada à conexão. Você pode ler mais sobre esse processo em Transmitir notificações sobre eventos de caixa de correio usando o EWS no Exchange.

Para notificações por pull, o objeto de assinatura foi inicializado quando a assinatura foi criada, então você só precisa chamar o método ou operação GetEvent para recuperar os eventos do servidor. Você pode ler mais sobre isso em Efetuar pull de notificações sobre eventos de caixa de correio usando o EWS no Exchange.

A tabela a seguir lista as operações e classes necessárias para recuperar eventos.

Tabela 3. Elementos e classes para criar uma conexão e obter eventos

Tipo de assinatura Operação do EWS Método da API Gerenciada do EWS Função
Streaming
Operação GetStreamingEvents
Método StreamingSubscriptionConnection.AddSubscription method
Cria uma solicitação get deslocada no servidor, que é respondida quando os eventos ocorrem.
Efetuar pull
Operação GetEvents
Método PullSubscription.GetEvents
Obtém eventos de notificação por pull do servidor.
Enviar por push
Não aplicável.
Não aplicável.
As notificações por push são enviadas automaticamente ao ouvinte do serviço Web (a URL de retorno de chamada especificada na solicitação da assinatura). Não é necessário chamar nenhum outro método ou operação.

Como cancelo assinatura das notificações?

A tabela a seguir lista as maneiras pelas quais você pode cancelar assinatura de cada tipo de assinatura.

Tabela 4. Operações e métodos para cancelar assinatura das notificações

Tipo de assinatura EWS API Gerenciada do EWS
Streaming
Operação de cancelamento de assinatura
Método StreamingSubscription.BeginUnsubscribe
Método StreamingSubscription.EndUnsubscribe
Método StreamingSubscription.Unsubscribe
Efetuar pull
Operação de cancelamento de assinatura
Método PullSubscription.BeginUnsubscribe
Método PullSubscription.EndUnsubscribe
Método PullSubscription.Unsubscribe
Enviar por push
Retornar Cancelar assinatura no elemento StatusFrequency do SendNotificationResponseMessage
Não aplicável. Em vez disso, deixe a assinatura expirar.

Como alternativa, você pode deixar cada uma das assinaturas expirar.

Tabela 5. Tempo limite da assinatura

Tipo de assinatura Valor de tempo limite no EWS Valor de tempo limite na API Gerenciada do EWS Tratamento de tempo limite
Streaming
Elemento ConnectionTimeout
Parâmetro de tempo de vida do construtor StreamingSubscriptionConnection
Para a API Gerenciada do EWS, depois que o valor de tempo limite expirar, o evento OnDisconnect será gerado. Se o método StreamingSubscriptionConnection.Open não for chamado, a conexão será fechada.
Para o EWS, depois que o valor de tempo limite expira, a mensagem GetUserConfigurationResponse retorna um valor ConnectionStatus de fechado.
Efetuar pull
elemento tempo limite
parâmetro de tempo limite do método SubscribeToPullNotification
Após o valor de tempo limite expirar, o servidor excluirá a assinatura.
Enviar por push
elemento StatusFrequency
parâmetro de frequência do método SubscribeToPushNotification
Se o servidor não receber uma resposta a uma notificação por push ou ping de status, ele tentará enviar a notificação várias vezes antes de parar de enviar as notificações. Para obter mais informações, consulte StatusFrequency.

Posso limitar as assinaturas?

Em uma implantação local, você pode limitar o número de assinaturas por usuário com o parâmetro de limitação EwsMaxSubscriptions da política de limitação. Essa política pode ser aplicada a todos os usuários ou apenas a usuários específicos. A política de limitação EwsMaxSubscriptions não é configurável para o Exchange Online.

Nesta seção

Confira também