Partilhar via


Limitação do EWS no Exchange

Saiba mais sobre as políticas de limitação que afetam o EWS ao usar o Exchange.

Fornecido por: Glen Scales; Michael Mainer, Microsoft Corporation

O artigo fornece informações sobre a limitação do EWS no Exchange Online, no Exchange Online como parte do Office 365 e em versões locais do Exchange a partir do Exchange 2010. A limitação no Exchange ajuda a garantir a confiabilidade e o tempo de ativação do servidor, limitando a quantidade de recursos de servidor que um único usuário ou aplicativo pode consumir. A limitação é uma resposta reativa ao uso excessivo de recursos do sistema que podem afetar a confiabilidade e a funcionalidade do serviço. O Exchange monitora constantemente a integridade de recursos críticos de infraestrutura, como bancos de dados de caixa de correio. Quando fatores de alta carga são detectados que degradam o desempenho desses recursos, as conexões do EWS são limitados proporcionalmente com base na quantidade que cada chamador contribuiu para essa condição de alta carga. O resultado é que um usuário pode estar dentro da limitação e ainda enfrentar lentidão até que a integridade do recurso volte a níveis operacionais.

Cada protocolo de acesso do cliente no Exchange, incluindo o EWS, tem uma política de limitação. Ao criar aplicativos que usam o EWS, é importante levar em conta as políticas de limitação, para ajudar a garantir a confiabilidade do aplicativo e a integridade do servidor Exchange. Este artigo identifica as diferentes políticas de limitação e os limites de serviço para o EWS, seja visando o Exchange Online ou as versões do Exchange local a partir do Exchange Server 2010. Conforme aplicável, este artigo também identifica diferenças nas políticas de limitação em diferentes versões do Exchange.

Importante

A política de limitação padrão, o acesso à política de limitação e a configuração da política do Exchange Online e do Exchange local. Os valores específicos de configuração de limitação são precisos apenas para uma versão específica do Exchange. Este artigo não fornece os valores de configuração padrão, pois os valores de configuração variam entre versões e como os administradores do Exchange podem alterar as políticas de ajuste padrão para implantações locais. É mais importante que você esteja ciente das considerações para projetar um aplicativo que funciona dentro da limitação e reage adequadamente aos cenários de limitação.

Se você for um desenvolvedor de aplicativos, precisará fatorar a aplicação no design do aplicativo. Versões diferentes do Exchange têm valores padrão diferentes para os parâmetros de limitação do EWS. Os aplicativos de cliente e de serviço projetados para acessar diferentes versões do Exchange precisarão levar em conta essas configurações, sejam valores padrão, valores personalizados definidos por um administrador do Exchange ou, quanto ao Exchange Online, definidos por padrão e não podem ser descobertos. Como os valores do parâmetro de limitação não podem ser descobertos programaticamente, as especificações de design do cliente devem incluir um plano para que o aplicativo se adapte a diferentes potenciais limitações. Ao projetar aplicativos com vários threads que acessarão um grande número de caixas de correio ou quando muitos clientes acessam a mesma caixa de correio, considere os limites de simultaneidade que a política padrão aplica ao Exchange.

Políticas de limitação que afetam o EWS

As políticas de limitação do Exchange afetam não apenas o EWS, mas também todas as conexões do cliente com o servidor Exchange, incluindo os protocolos usados pelo Office Outlook, Outlook Web App e Exchange ActiveSync.

A política de limitação CPUStartPercent pode afetar o desempenho do EWS ao executar o Exchange 2010. Quando a utilização média da CPU de processos do Exchange executados no servidor de Acesso ao Cliente, incluindo, mas não se limitando ao processo do EWS, excede o valor especificado por essa política, as solicitações de entrada serão atrasadas para reduzir a utilização da CPU. Você não pode alterar o valor dessa política, mas saber sobre ela pode ajudar na solução de problemas de desempenho. A lógica de amostragem que o servidor de Acesso ao Cliente executa para esse valor é uma média em uma janela de rolagem de 10 segundos. Isso permite que o processo responda adequadamente a picos rápidos na utilização da CPU. Quando esse limite é excedido, as conexões de entrada para o EWS são atrasadas. Esse atraso é limitado a 500 milissegundos (msecs) em um uso teórico de 100% da CPU por solicitação do EWS. Se uma solicitação do EWS em lote para obter 100 itens for passada, o servidor verificará o uso da CPU 100 vezes (uma vez por item) para um atraso máximo de 50 segundos. O tempo de atraso é linearmente proporcional ao uso da CPU. Em CPUStartPercent, o atraso é 0 (um rendimento de thread) e aumenta linearmente até 500 msec a 100% de uso da CPU. Como as políticas de limitação se aplicam a todos os usuários do Exchange, é improvável que o uso da CPU exceda o limite CPUStartPercent em um servidor de Acesso ao Cliente do Exchange, pois usuários individuais ou aplicativos não podem obter utilização de CPU suficiente para afetar a operação do servidor.

A tabela a seguir lista os parâmetros da política de limitação que afetam aplicativos que usam o EWS.

Tabela 1: Parâmetros da política de limitação que afetam o EWS

Nome do parâmetro da política de limitação Aplica-se a Descrição
DiscoveryMaxConcurrency Exchange 2013 Exchange Online Especifica o número de conexões de pesquisa de descoberta simultâneas que um usuário pode ter ao mesmo tempo.
DiscoveryMaxKeywords Exchange 2013 Exchange Online Especifica o número máximo de palavras-chave que um usuário pode incluir em uma pesquisa de descoberta.
DiscoveryMaxKeywordsPerPage Exchange 2013 Exchange Online Especifica o número de palavras-chave para as quais mostrar estatísticas.
DiscoveryMaxMailboxes Exchange 2013 Exchange Online Especifica o número máximo de caixas de correio de origem que um usuário pode incluir em uma pesquisa de descoberta.
DiscoveryMaxMailboxesResultsOnly Exchange 2013 Exchange Online Especifica o número máximo de caixas de correio que você pode pesquisar em uma pesquisa de Descoberta Eletrônica In-loco sem poder exibir as estatísticas.
DiscoveryPreviewSearchResultsPageSize Exchange 2013 Exchange Online Especifica o número de mensagens retornadas em uma resposta de visualização de pesquisa de Descoberta Eletrônica.
EwsCutoffBalance Exchange 2013 Exchange Online Define os limites de consumo de recursos para o usuário do EWS antes que esse usuário seja completamente impedido de executar operações em um componente específico.
EwsMaxBurst Exchange 2013 Exchange Online Define a quantidade de tempo que um usuário do EWS pode consumir uma quantidade elevada de recursos antes de ser limitado. Isso é medido em milissegundos. Esse valor é definido separadamente para cada componente.
EwsRechargeRate Exchange 2013 Exchange Online Define a taxa na qual o orçamento de um usuário do EWS é cobrado (o orçamento aumenta por) durante o tempo de orçamento.
EWSMaxSubscriptions Exchange 2010 Exchange 2013 Exchange Online Define o número máximo de assinaturas de notificação por push, pull e streaming ativas que um usuário pode ter em um servidor de Acesso ao Cliente específico ao mesmo tempo. Isso é orçado de forma diferente para diferentes versões do Exchange.
EWSFastSearchTimeoutInSeconds Exchange 2010 Define a quantidade de tempo em segundos que as pesquisas rápidas executadas usando a Pesquisa do Exchange no EWS continuam antes do tempo limite. Pesquisas rápidas são pesquisas feitas usando uma cadeia de caracteres de consulta AQS (Sintaxe de Consulta Avançada) em uma operação FindItem.
EWSFindCountLimit Exchange 2010 Exchange 2013 Exchange Online Define o número máximo de itens de uma operação FindItem ou operação FindFolder que pode existir na memória no servidor de Acesso ao Cliente ao mesmo tempo para um usuário. O valor padrão para essa propriedade é 1000. O valor de fallbackpara esse valor é 1000. No Exchange Online e em versões locais do Exchange a partir do Exchange 2013, essa política de limitação não pode ser consultada ou configurada por um cmdlet. No Exchange Online e em versões locais do Exchange a partir do Exchange 2013, EWSFindCountLimit para pesquisa AQS e qualquer pesquisa do Exchange com restrição são 250 resultados. Uma pesquisa do Exchange sem restrição retornará até 1000 resultados.
EWSPercentTimeInAD Exchange 2010 Define a porcentagem de tempo por minuto durante o qual um usuário específico pode executar solicitações do Active Directory.
EWSPercentTimeInCAS Exchange 2010 Define a porcentagem de tempo por minuto durante o qual um usuário específico pode executar o código do servidor de Acesso ao Cliente.
EWSPercentTimeInMailboxRPC Exchange 2010 Define a porcentagem de tempo por minuto durante o qual um usuário específico pode executar solicitações RPC de caixa de correio
EWSMaxConcurrency Exchange 2010 Exchange 2013 Exchange Online Define o número de conexões abertas simultâneas que um usuário específico pode ter em relação a um servidor Exchange que está usando o EWS ao mesmo tempo. O valor padrão para o Exchange 2010 é 10. O valor padrão para o Exchange 2013 e o Exchange Online é 27. Essa política se aplica a todas as operações, exceto para notificações de streaming. As notificações de streaming usam HangingConnectionLimit para indicar o número de conexões de eventos de streaming abertas disponíveis. Para obter mais informações, confira Quais valores de limitação preciso levar em consideração?.
MessageRateLimit Exchange 2010 Exchange 2013 Exchange Online Define o número de mensagens por minuto que podem ser enviadas.
RecipientRateLimit Exchange 2010 Exchange 2013 Exchange Online Define o limite para o número de destinatários que um usuário pode resolver em um período de 24 horas.
ForwardeeLimit Exchange 2010 Exchange 2013 Exchange Online Define o limite para o número de destinatários para ações de encaminhamento/redirecionamento da Caixa de Entrada em um período de 24 horas.
ConcurrentSyncCalls Exchange 2019 Exchange 2016 Exchange Online Define o limite para o número de chamadas de sincronização simultâneas (SyncFolderHierarchy, SyncFolderItems) para um usuário.

Cuidado

Não defina políticas de limitação como null. Isso definirá a política como ilimitada, o que indica que uma política de limitação não está definida.

Exibir políticas que se aplicam às caixas de correio do Exchange

O Exchange local fornece cmdlets do Shell de Gerenciamento do Exchange que você pode usar para definir e obter a política de limitação. O Exchange Online não fornece acesso aos cmdlets de política de limitação.

Use os seguintes cmdlets para exibir políticas de limitação para uma implantação do Exchange Server local:

  • Get-ThrottlingPolicy – retorna as configurações de limitação do cliente para uma ou mais políticas de limitação. Para obter mais informações, confira Get-ThrottlingPolicy no TechNet.

  • Get-limitaçãoPolicyAssociation – permite que você veja a relação entre um objeto e suas políticas de limitação associadas. O objeto pode ser um usuário com uma caixa de correio, um usuário sem uma caixa de correio ou um contato. Para obter mais informações, confira Get-ThrottlingPolicyAssociation no TechNet.

Use o comando a seguir para mostrar a política de limitação padrão para o Exchange 2010.

  • Get-ThrottlingPolicy | Where-Object {$_.IsDefault -eq "True"} | format-list

Use o comando a seguir para mostrar a política de limitação global (que equivale à política de limitação padrão no Exchange 2010) no Exchange 2013.

  • Get-ThrottlingPolicy | Where-Object {$_.ThrottlingPolicyScope -eq "Global"} | format-list

Use o comando a seguir para mostrar a política de limitação associada a um usuário no Exchange 2010 ou no Exchange 2013. Substitua o nome de usuário john@contoso.com pelo nome de usuário do usuário de destino para o qual você deseja obter informações da política de limitação.

  • Get-ThrottlingPolicyAssociation john@contoso.com | format-list

A execução desse comando no Shell de Gerenciamento do Exchange resulta em uma saída semelhante ao seguinte.

PS C:\>Get-ThrottlingPolicyAssociation john@contoso.com
RunspaceId               : 72153d6-9dce-2fae-8dbd-5ca5f760g2df
ObjectId                 : john
ThrottlingPolicyId       :
Name                     : john
Identity                 : FHXB-28178dom.contoso.com/Users/john
IsValid                  : True
NeedsToSuppressPii       : False
ExchangeVersion          : 0.10 (15.0.0.0)
DistinguishedName        : CN=john,CN=Users,DC=FHXB-28178dom,DC=contoso,DC=com
Guid                     : 2c10dab6-de28-1937-ad8g-535832613a08

Observação

Quando a propriedade ThrottlingPolicyId está em branco, a política padrão é aplicada à caixa de correio.

Você pode definir a política de limitação em um servidor Exchange usando os cmdlets Set-ThrottlingPolicy e Set-ThrottlingPolicyAssociation. Você pode criar e remover políticas de limitação não padrão usando os cmdlets New-limitaçãoPolicy e Remove-limitaçãoPolicy.

Dica

Recomendamos que você projete seus aplicativos para aderir à política de limitação padrão. Somente faça alterações nas políticas de limitação padrão se o design do aplicativo cliente não puder acomodar a política padrão. Esteja ciente de que políticas de limitação menos restritivas podem afetar negativamente a confiabilidade do serviço.

Considerações de limitação para aplicativos que usam a representação do EWS

A Representação é um método de autorização que permite que uma única conta acesse várias contas. Quando uma conta de serviço representa os usuários, ela age como usuários e, portanto, assume os direitos atribuídos a esses usuários. Os arquivos de log registram o acesso como o usuário representado. Os administradores usam o RBAC (controle de acesso baseado em função) para configurar a representação por meio do Shell de Gerenciamento do Exchange.

Quando a representação é usada, os orçamentos de todas as limitações se aplicam de forma diferente, dependendo da versão do Exchange. O orçamento é calculado em relação à conta representada ou à conta de serviço. Se o aplicativo tiver vários threads e fizer solicitações simultâneas em várias caixas de correio, considere como a limitação afetará o desempenho do aplicativo. Em geral, esteja ciente dos seguintes limites em contas de serviço ao criar um aplicativo baseado em serviço que usa a representação para acessar todas as caixas de correio:

  • Quando você usa a Representação, a conta de serviço tem um orçamento separado para os seguintes parâmetros de política:

    • EWSMaxConcurrency
    • EWSPercentTimeInAD
    • EWSPercentTimeInCAS
    • EWSPercentTimeInMailboxRPC
    • EWSMaxSubscriptions
    • EWSFastSearchTimeoutInSeconds
    • EWSFindCountLimit
  • O orçamento EWSMaxConcurrency é compartilhado para a conta de serviço e a conta representada para todas as conexões com versões do Exchange anteriores ao Pacote Cumulativo de Atualizações 4 (RU4) para o Exchange Server 2010 Service Pack 2 (SP2). A partir do Exchange 2010 SP2 RU4 e incluindo Exchange Online, o acesso à conta de serviço usa um orçamento separado do orçamento do usuário EWSMaxConcurrency. Para obter mais informações sobre a atualização para a política de limitação de conexão simultânea do Exchange para o EWS, confira Descrição do Pacote Cumulativo de Atualizações 4 para o Exchange Server 2010 Service Pack 2.

    As notificações de streaming do EWS em versões do Exchange a partir do Exchange 2010 e incluindo o Exchange Online, têm um orçamento EWSMaxConcurrency clonado adicional de todas as outras conexões de cliente do EWS. As conexões de notificação de streaming são contadas em relação a um orçamento separado de todas as outras operações do EWS. O orçamento máximo de simultaneidade da notificação de streaming é, na verdade, dois orçamentos diferentes: um orçamento é para todas as contas de serviço e um orçamento é para a conta representada. As notificações de streaming no Exchange Online e em versões do Exchange a partir do Exchange 2013 usam o HangingConnectionLimit para limitar o número de conexões.

    Por exemplo, vamos supor que EWSMaxConcurrency seja igual a cinco. Um usuário pode ter cinco conexões de notificação de pull abertas, enquanto uma conta de serviço pode ter cinco conexões simultâneas de notificação de pull na caixa de correio do usuário ao mesmo tempo que o usuário.

  • A tabela a seguir identifica como os orçamentos de limitação EWSMaxSubscriptions são calculados entre a conta de serviço e a conta a ser representada.

    Tabela 2: Contabilidade de orçamento do EWSMaxSubscriptions

    Versão do Exchange Contabilidade de orçamento do EWSMaxSubscriptions
    Exchange Online Cobrado na caixa de correio de destino.
    Exchange 2013 Cobrado na caixa de correio de destino.
    Exchange 2010 SP3 Cobrado na caixa de correio de destino.
    Exchange 2010 SP3 Cobrado na conta de chamada. A partir do Exchange 2010 SP2 RU4, o orçamento é cobrado na caixa de correio de destino.
    Exchange 2010 SP1 Cobrado na conta de chamada.
    Exchange 2010 Cobrado na conta de chamada.
  • Como o orçamento de limitação do EWSMaxSubscriptions é cobrado em relação à conta representada, não há limite no número de caixas de correio para as quais uma conta de serviço pode assinar e receber notificações de streaming, desde que a representação esteja sendo usada. Para a conta representada, você não pode ter mais de n solicitações simultâneas por caixa de correio de destino, onde n é o valor EWSMaxSubscriptions. Se você não estava usando a representação, a mesma conta de serviço não poderia ter mais de n solicitações simultâneas totais. Portanto, a principal lição é que, ao usar a representação em uma conta de serviço, você aumenta exponencialmente o número de caixas de correio que podem ser atendidas. Para mais informações, confira Manter afinidade entre um grupo de assinaturas e o servidor da caixa de correio no Exchange.

  • Os parâmetros de política EWSPercentTimeInMailboxRPC, EWSPercentTimeInCAS e EWSPercentTimeInAD referem-se às ações executadas por um único thread. Quando um aplicativo executa várias operações simultâneas, leve em conta o efeito cumulativo dessas operações no orçamento de recursos do usuário.

Implicações de limitação para solicitações em lotes do EWS

O EWS permite que você faça lote de várias solicitações de item em uma única solicitação executada pelo servidor de Acesso ao Cliente. Isso permite maior eficiência e desempenho. Quando um servidor Exchange executa uma solicitação em lote, ele verifica o orçamento do usuário após a execução de cada item no lote. Se o aplicativo estiver acima do orçamento, o processamento do próximo item no lote será adiado até que o orçamento desse usuário seja recarregado. Para garantir que os aplicativos que usam operações em lotes sejam executados com êxito, limite o número de solicitações de item que podem ser incluídas em um único lote e divida lotes grandes entre vários lotes menores para aumentar a confiabilidade dos resultados. O efeito que uma operação em lotes tem sobre limitações específicas depende do tipo da solicitação, do tamanho dos itens a serem processados (por exemplo, nas operações UploadItems ou ExportItems ) e do conteúdo da caixa de correio. As políticas de limitação afetam as operações em lotes, fazendo com que a solicitação leve mais tempo para ser processada. Portanto, o chamador terá que esperar mais tempo pela resposta e, como o EWS limita o tempo de execução de uma solicitação em lotes para um minuto, a chamada poderá ter um tempo limite.

Para determinar o tamanho de lote ideal para um aplicativo, execute testes de unidade usando vários conjuntos de entrada para garantir que o aplicativo não encontrará erros em um ambiente de produção.

Parâmetros de política de limitação que afetam as operações de pesquisa do EWS

As operações de pesquisa no EWS podem exigir grandes quantidades de tempo e recursos, dependendo de como a pesquisa é executada e quais informações são solicitadas. Para controlar o uso de recursos durante as pesquisas, dois parâmetros de política entram em vigor: EWSFastSearchTimeoutInSeconds e EWSFindCountLimit.

O parâmetro de política EWSFastSearchTimeoutInSeconds especifica a quantidade de tempo, em segundos, que as pesquisas rápidas do EWS (também conhecidas como pesquisa de indexação de conteúdo) são executadas antes do tempo limite. Uma pesquisa rápida é uma pesquisa feita usando uma cadeia de caracteres de consulta AQS (Sintaxe de Consulta Avançada) em uma operação FindItem.

Você pode pesquisar uma pasta de caixa de correio do Exchange de duas maneiras:

  • Usando uma pesquisa de repositório do Exchange, que executa uma verificação sequencial de todas as mensagens no escopo da pesquisa de destino.

  • Usando o serviço Pesquisa do Exchange (indexação de conteúdo).

Esses dois tipos de pesquisa podem resultar em tempos limites. Quando possível, use o serviço Pesquisa do Exchange, pois essas pesquisas geralmente são direcionadas para índices da caixa de correio e usam consultas AQS. O exemplo a seguir mostra como executar uma pesquisa AQS da Caixa de Entrada usando o EWS e o serviço Pesquisa do Exchange.

ItemView iv = new ItemView(1000);
FindItemsResults<Item> fiitems = service.FindItems(WellKnownFolderName.Inbox, "subject:football", iv);

Se você não puder usar uma pesquisa AQS, evite usar filtros de pesquisa muito complexos. Também tente evitar a criação de filtros de pesquisa com base em valores calculados se a consulta envolver propriedades MAPI estendidas. A pesquisa AQS foi introduzida no Exchange 2010.

Observação

Na primeira vez que você executa uma consulta de pesquisa de repositório complexa do Exchange, ela é executada muito lentamente e pode passar o tempo limite. Depois disso, a consulta responderá mais rapidamente. Para obter mais informações sobre os processos do servidor Exchange de back-end que ocorrem durante consultas de pesquisa de repositório do Exchange, confira Noções básicas sobre o impacto no desempenho de contagens de itens altas e exibições restritas no TechNet. O uso de um SearchFilter cria uma restrição dinâmica que ajuda consultas semelhantes no futuro, mas como essas restrições são dinâmicas por natureza, elas não são permanentes ou confiáveis, bem como são excluídas após um máximo de três dias.

O parâmetro de política EWSFindCountLimit especifica o número máximo de itens dos resultados de uma operação FindItem ou FindFolder que pode existir na memória em um servidor de Acesso ao Cliente ao mesmo tempo para um usuário. Cada item ou pasta que o EWS processa em uma solicitação FindItem ou FindFolder é contado em relação ao orçamento especificado no elemento EWSFindCountLimit. Quando a resposta é enviada de volta ao solicitante, o custo de contagem de localização para a chamada atual é liberado. A resposta que o servidor retorna a um solicitante quando o orçamento é excedido é baseada no valor do elemento RequestServerVersion e se o solicitante especificou a paginação. Quando o valor do elemento RequestServerVersion indica o Exchange 2010 ou uma versão anterior do Exchange, o servidor envia uma resposta de falha com o código de erro ErrorServerBusy. Se o valor do elemento RequestServerVersion indicar uma versão do Exchange a partir do Exchange 2010 SP1 ou do Exchange Online, e o cliente estiver usando paginação, o EWS poderá retornar um conjunto de resultados parcial em vez de um erro. Seu aplicativo deve esperar que talvez o EWS não retornará todos os itens. Se o valor do elemento IncludesLastItemInRange for false, o aplicativo deverá fazer outra solicitação FindItem ou FindFolder com o novo deslocamento e continuar até que o elemento IncludesLastItemInRange retorne true.

É importante usar paginação ao usar uma operação FindItem ou FindFolder. A API Gerenciada do EWS impõe o uso da paginação, mas se você estiver usando outros métodos, como objetos proxy EWS ou SOAP bruto, será necessário definir explicitamente a paginação. O exemplo a seguir mostra como usar a paginação na API Gerenciada do EWS.

ItemView iv = new ItemView(1000);
FindItemsResults<Item> fiFindItemResults = service.FindItems(WellKnownFolderName.Inbox, iv);

Observação

A política padrão no Exchange limita o tamanho da página a 1.000 itens. Definir o tamanho da página como um valor maior do que esse número não tem efeito prático.

Os aplicativos também devem levar em conta o fato de que o valor do parâmetro de limitação EWSFindCountLimit pode resultar em um conjunto de resultados parcial sendo retornado para aplicativos que fazem solicitações simultâneas. O exemplo a seguir mostra como usar a propriedade MoreAvailable na API Gerenciada do EWS para garantir que todos os resultados sejam incluídos em uma consulta.

ItemView iv = new ItemView(1000);
service.TraceEnabled = false;
FindItemsResults<Item> fiResults = null;
Do
{
    fiResults = service.FindItems(WellKnownFolderName.Inbox, iv);
    PropertySet itItemPropSet = new PropertySet(BasePropertySet.IdOnly) { EmailMessageSchema.Body };
    //Process Items in Result Set
    iv.Offset += fiResults.Items.Count;
}
while (fiResults.MoreAvailable == true);

Políticas de limitação e simultaneidade

A simultaneidade refere-se ao número de conexões de um usuário específico. Uma conexão é mantida a partir do momento em que uma solicitação é recebida até que uma resposta seja enviada completamente ao solicitante. Se os usuários tentarem fazer mais solicitações concorrentes que o permitido por suas diretivas, o nova tentativa de conexão falhará. Entretanto, as condições existentes continuam válidas. As políticas de limitação podem afetar a simultaneidade de várias maneiras.

O parâmetro de política de limitação EWSMaxConcurrency define o número de conexões simultâneas que um usuário específico pode ter em relação a um servidor Exchange ao mesmo tempo. Para determinar o número máximo de conexões simultâneas a serem permitidas, considere as conexões que os clientes do Outlook usarão. O Outlook 2007 e o Outlook 2010 usam o EWS para acessar as informações de disponibilidade e ausência temporária (ausente). O Mac Outlook 2011 usa o EWS para toda a funcionalidade de acesso do cliente. Dependendo do número de clientes do Outlook que estão se conectando ativamente à caixa de correio de um usuário, o número de conexões simultâneas disponíveis para um usuário pode ser limitado. Além disso, se seu aplicativo precisa se conectar a várias caixas de correio simultaneamente ao usar um único contexto de segurança, é importante levar em conta o valor da política EWSMaxConcurrency. Para obter mais informações sobre como usar um único contexto de segurança com conexões simultâneas, confira Considerações de limitação para aplicativos que usam a representação do EWS anteriormente neste artigo.

Os aplicativos que se conectam simultaneamente a várias caixas de correio devem ser capazes de controlar o uso de recursos no lado do cliente. Como as operações do EWS são baseadas em solicitação/resposta, você pode garantir que seus aplicativos funcionem bem dentro do limite EWSMaxConcurrency ao rastrear o número de conexões que ocorrem entre o início de uma solicitação e quando a resposta é recebida, bem como garantindo que não mais de dez solicitações abertas ocorram simultaneamente.

O parâmetro de política EWSFindCountLimit especifica o tamanho máximo de resultados que uma operação FindItem ou FindFolder pode usar em um servidor de Acesso ao Cliente ao mesmo tempo para um usuário. Se um aplicativo (ou potencialmente vários aplicativos) fizer duas solicitações simultâneas do EWS FindItem que retornam 100 itens cada para um usuário específico, a cobrança do EWSFindCountLimit em relação ao orçamento desse usuário específico será de 200. Quando a primeira solicitação retorna, o orçamento cai para 100 e, quando a segunda solicitação retorna, o orçamento cai para zero. Se o mesmo aplicativo fosse fazer duas solicitações simultâneas para 1.000 itens, o valor do orçamento seria de 2.000 itens, o que excede o valor EWSFindCountLimit. Se o orçamento do usuário para itens ficar abaixo de zero, a próxima solicitação resultará em um erro até que o orçamento do usuário seja recarregado para um ou mais.

Considerações de limitação para aplicativos de notificação do EWS

Se você estiver criando aplicativos de notificação do EWS que usam as notificações de push, pull ou streaming, considere as implicações das EWSMaxSubscriptions e das políticas de limite EWSMaxConcurrency e o HangingConnectionLimit.

O parâmetro de política EWSMaxSubscriptions especifica o número máximo de inscrições push, pull e streaming ativas que um usuário pode ter em um servidor de Acesso para Cliente específico simultaneamente. Versões diferentes do Exchange têm valores padrão diferentes para esse parâmetro. Um usuário pode se inscrever em todas as pastas de uma caixa de correio usando a propriedade SubscribeToAllFolders. Isso usa uma única assinatura em relação ao orçamento do EWSMaxSubscriptions. Os usuários podem se inscrever em pastas individuais, com cada assinatura de pasta contando para o orçamento EWSMaxSubscriptions, até o limite definido pelo valor do parâmetro EWSMaxSubscriptions (por exemplo, os usuários podem assinar 20 pastas de calendário em caixas de correio diferentes se EWSMaxSubscriptions estiver definido como 20).

Para obter informações sobre a representação e o parâmetro EWSMaxSubscriptions, confira Considerações de limitação para aplicativos que usam a representação do EWS anteriormente neste artigo.

O parâmetro de política EWSMaxConcurrency também pode ser um problema para notificações EWS; por exemplo:

  • Quando o EWS incrementa a contagem de conexão para o proprietário da assinatura enquanto a notificação está sendo gerada por uma assinatura por push.

  • Quando um aplicativo é projetado para ouvir caixas de correio de vários usuários, os usuários recebem notificações simultâneas para uma instância de uma mensagem que é enviada para uma lista de distribuição.

Se o aplicativo de notificação tiver vários threads e fizer solicitações simultâneas de conexão para obter mais informações sobre uma mensagem específica recebida por uma conta de usuário, o limite da política EWSMaxConcurrency poderá ser excedido. Para levar em conta isso, considere monitorar as conexões simultâneas em seu aplicativo, incluindo aquelas que podem ser usadas pelo servidor, e implementar a fila de solicitações no cliente.

O HangingConnectionLimit só é aplicável a notificações de streaming. Esse limite é definido no arquivo web.config, o que significa que um administrador do Exchange pode definir esse valor em um servidor Exchange local, mas as caixas de correio do Exchange Online devem usar o valor padrão para esse limite, que é 10 para o Exchange Online, o Exchange 2019 e o Exchange 2016, e 3 para o Exchange 2013. Para saber mais, confira Quais valores de limitação preciso levar em consideração?.

Política de limitação e desempenho do aplicativo

Os três parâmetros a seguir da política de limitação PercentTimeIn afetam o tempo que um aplicativo EWS pode consumir em um servidor de Acesso ao Cliente:

  • EWSPercentTimeInAD
  • EWSPercentTimeInCAS
  • EWSPercentTimeInMailboxRPC

Os valores especificados nos parâmetros de política PercentTimeIn indicam a quantidade de tempo em que um thread que faz uma solicitação é alocado. Por exemplo, a assumir um valor EWSPercentTimeInCAS de 90, se um processo fizer duas solicitações simultâneas que gastam 54 segundos cada código em execução no servidor de Acesso ao Cliente, o processo usa 108 segundos em uma janela de 60 segundos. Isso representa um valor de parâmetro EWSPercentTimeInCAS de 180%.

Observação

O valor do parâmetro EWSPercentTimeInCAS é um superconjunto sobreposto dos valores dos parâmetros EWSPercentTimeInAD e EWSPercentTimeInMailboxRPC. Isso significa que o gasto no tempo de processamento do servidor de Acesso ao Cliente sempre será maior do que os gastos no EWSPercentTimeInAD e no EWSPercentTimeInMailboxRPC. Isso é porque, para o componente do Exchange fazer uma chamada do Active Directory ou de RPC, ele já deve estar executando o código do servidor de Acesso ao Cliente. Além disso, o gasto em tempo de processamento para PercentTimeInCAS não é interrompido enquanto as chamadas LDAP ou RPC estão sendo feitas. Apesar de a solicitação poder estar aguardando em sincronia por uma resposta do repositório do Active Directory Domain Services (AD DS) ou do Exchange, o processo ainda estará consumindo um thread no servidor e, dessa forma, deverá continuar a ser cobrado por esse uso.

A quantidade de tempo de CPU que um aplicativo pode levar em um período de 60 segundos pode exceder essas limitações; portanto, é importante considerar o volume e o tipo de solicitações que estão sendo feitas. Por exemplo, um grande lote de operações ResolveNames feitas simultaneamente pode exceder o valor do parâmetro de política EWSPercentTimeInAD. Os valores de política contidos na política de restrição padrão foram projetados para permitir que a maioria dos aplicativos EWS funcione sem problemas. No entanto, quando os aplicativos de alto volume com vários threads coloca um grande volume de solicitações em um servidor de Acesso ao Cliente específico, isso pode criar problemas. Para evitar isso, considere limitar o tamanho de lotes que serão executados no servidor.

Políticas e aplicativos de limitação que enviam um grande volume de email

As políticas de limitação padrão incluem três parâmetros de política de limite de taxa que podem afetar aplicativos que usam o EWS para enviar um grande volume de mensagens ou enviar mensagens em lotes grandes em um curto período de tempo.

Observação

Em geral, recomendamos que você não use o EWS para enviar emails em massa. Use um host SMTP especializado em serviços de email em massa para enviar mensagens de email em massa frequentes.

O parâmetro de política MessageRateLimit especifica o número de mensagens por minuto que podem ser enviadas por qualquer cliente do Exchange, incluindo o EWS. Por padrão, essa política é definida como 30 mensagens por minuto no Exchange Online (ela é ilimitada no Exchange Server). Para usuários comuns no Exchange Online, esse limite de taxa geralmente é suficiente. No entanto, aplicativos que enviam grandes lotes de mensagens de email, por exemplo, como parte de um programa de faturamento, podem ter problemas. Quando esse limite de política é excedido, a entrega de mensagens para a caixa de correio sofre atrasos. Especificamente, as mensagens serão exibidas na pasta Outbox ou Rascunhos por períodos mais longos quando um usuário ou aplicativo enviar um número maior de mensagens do que o valor especificado pelo parâmetro MessageRateLimit. Considere isso quando estiver desenvolvendo um sistema de controle de entrega, especialmente se seu aplicativo usa uma caixa de correio à que os usuários se conectam por meio do Outlook. Quando os itens adiados são armazenados na pasta Caixa de Saída ou Rascunhos, os usuários podem interpretar isso como erro.

O parâmetro de política RecipientRateLimit especifica os limites no número de destinatários que um usuário pode endereçar em um período de 24 horas. Por exemplo, se esse valor for definido como 500, isso significa que uma única conta de caixa de correio do Exchange pode enviar mensagens para no máximo 500 destinatários por dia. Esse limite se aplica a mensagens para destinatários dentro e fora da organização. Esse limite padrão pode causar problemas para alguns aplicativos de linha de negócios que executam faturas de fim de mês e precisam enviar mensagens para mais do que esse número de destinatários. Você pode usar serviços externos que permitem o processamento em lote de mensagens ou soluções de retransmissão locais separadas para resolver essa limitação.

O parâmetro de política ForwardeeLimit especifica o número máximo de destinatários para os que as mensagens podem ser encaminhadas ou redirecionadas por meio de regras da Caixa de Entrada. Este parâmetro não limita o número de mensagens que podem ser encaminhadas ou redirecionadas aos destinatários.

Erros gerados quando os limites de limitação são excedido

Quando as políticas de limitação são excedidas, o EWS gera um dos erros listados na tabela a seguir.

Tabela 3: Erros de limitação

Erro Parâmetro de política de limitação Descrição
ErrorExceededConnectionCount EWSMaxConcurrency Indica que há mais solicitações simultâneas no servidor do que as permitidas pela política de um usuário.
ErrorExceededSubscriptionCount EWSMaxSubscriptions Indica que a contagem máxima de assinaturas da política de limitação de um usuário foi excedida.
ErrorExceededFindCountLimit EWSFindCountLimit Indica que uma chamada de operação de pesquisa excedeu o número total de itens que podem ser retornados.
ErrorServerBusy EWSPercentTimeInMailboxRPC
EWSPercentTimeInCAS
EWSPercentTimeInAD
Ocorre quando o servidor está ocupado. O valor BackOffMilliseconds retornado com erros ErrorServerBusy indica ao cliente a quantidade de tempo que ele deve aguardar até que ele deva reenviar a solicitação que causou a resposta que retornou esse código de erro.

A tabela a seguir lista os códigos de status HTTP retornados por erros de limitação.

Tabela 4: códigos de status HTTP retornados por erros de limitação

Código de status de HTTP Descrição
HTTP 503 Indica que as solicitações do EWS estão na fila com o IIS. O cliente deve atrasar o envio de solicitações adicionais até um momento posterior.
HTTP 500 Indica um erro de servidor interno com o código de erro ErrorServerBusy. Isso indica que o cliente deve atrasar o envio de solicitações adicionais até um momento posterior. A resposta pode conter uma dica de back-off chamada BackOffMilliseconds. Se presente, o valor de BackOffMilliseconds deve ser usado como a duração até que o cliente reapresente uma solicitação.
HTTP 200 Contém uma resposta de erro baseada em esquema EWS com um código de erro ErrorInternalServerError. Um código de erro errorServerBusy interno pode estar presente. Isso indica que o cliente deve atrasar o envio de solicitações adicionais até um momento posterior.

Confira também