Limitación de EWS en Exchange

Obtenga información sobre las directivas de limitación que afectan a EWS cuando se usa Exchange.

Proporcionado por: Glen Scales; Michael Mainer, Microsoft Corporation

El artículo proporciona información sobre la limitación de EWS en Exchange Online, Exchange Online como parte de Office 365 y versiones locales de Exchange a partir de Exchange 2010. La limitación de Exchange ayuda a garantizar la confiabilidad y el tiempo de actividad del servidor limitando la cantidad de recursos de servidor que puede consumir un único usuario o aplicación. La limitación es una respuesta reactiva al uso excesivo de los recursos del sistema que puede afectar a la confiabilidad y funcionalidad del servicio. Exchange supervisa constantemente el estado de los recursos críticos de infraestructura, como las bases de datos de los buzones de correo. Cuando se detectan factores de carga altos que degradan el rendimiento de estos recursos, las conexiones EWS se limitan proporcionalmente en función de la cantidad que cada autor de llamada ha contribuido a esta condición de carga alta. El resultado es que un usuario puede estar dentro de su límite de limitación y seguir experimentando ralentizaciones hasta que el estado del recurso vuelva a los niveles operativos.

Cada protocolo de acceso de Exchange, incluido EWS, tiene una directiva de limitación. Al diseñar aplicaciones que usan EWS, es importante tener en cuenta las directivas de limitación, para ayudar a garantizar la confiabilidad de las aplicaciones y el estado de su servidor Exchange. En este artículo se identifican las distintas directivas de limitación y los límites de servicio de EWS, tanto si el destino es Exchange Online o las versiones de Exchange local a partir de Exchange Server 2010. Según corresponda, en este artículo también se identifican diferencias en las directivas de limitación en diferentes versiones de Exchange.

Importante

La directiva de limitación predeterminada, el acceso a la directiva de limitación y la configuración de la directiva de limitación difieren entre Exchange Online y Exchange local. Los valores de configuración de limitación específicos solo son precisos para una versión específica de Exchange. Dado que los valores de configuración varían según las versiones y como los administradores de Exchange pueden cambiar las directivas de limitación predeterminadas para las implementaciones locales, este artículo no proporciona los valores de configuración predeterminados. Es más importante que tenga en cuenta las consideraciones para diseñar una aplicación que funcione dentro de los límites de limitación y que reaccione adecuadamente a los escenarios de limitación.

Si es desarrollador de aplicaciones, debe tener en cuenta la limitación en el diseño de la aplicación. Las diferentes versiones de Exchange tienen valores predeterminados diferentes para los parámetros de limitación de EWS. Las aplicaciones de cliente y de servicio diseñadas para tener acceso a distintas versiones de Exchange tendrán que tener en cuenta esta configuración, ya sean valores predeterminados, valores personalizados establecidos por un administrador de Exchange o, como en Exchange Online, establecidos de forma predeterminada y no detectables. Dado que los valores de los parámetros de limitación no se pueden detectar mediante programación, las especificaciones de diseño de cliente deben incluir un plan para que la aplicación se adapte a diferentes límites potenciales de limitación. Cuando diseñe aplicaciones multiproceso que tengan acceso a un gran número de buzones o cuando muchos clientes tengan acceso al mismo buzón, tenga en cuenta los límites de simultaneidad que la directiva predeterminada aplica a Exchange.

Directivas de limitación que afectan a EWS

Las directivas de limitación de Exchange afectan no solo a EWS, sino también a todas las conexiones de cliente al servidor de Exchange, incluidos los protocolos usados por Office Outlook, Outlook Web App y Exchange ActiveSync.

La directiva de limitación CPUStartPercent puede afectar al rendimiento de EWS cuando se ejecuta Exchange 2010. Cuando el uso medio de la CPU de los procesos de Exchange que se ejecutan en el servidor de acceso de cliente (incluido, entre otros, el proceso EWS) supera el valor especificado por esta directiva, las solicitudes entrantes se retrasarán para reducir el uso de la CPU. No puede cambiar el valor de esta directiva, pero conocerla puede ayudarle a solucionar problemas de rendimiento. La lógica de muestreo que el servidor de acceso de cliente realiza para este valor es un promedio de una ventana gradual de 10 segundos. Esto permite que el proceso responda correctamente a los picos rápidos de el uso de la CPU. Cuando se supera este umbral, las conexiones entrantes a EWS se retrasan. Este retraso se limita a 500 milisegundos (ms) con un uso teórico de CPU del 100 % por solicitud EWS. Si se pasa una solicitud EWS por lotes para obtener 100 elementos, el servidor comprobará el uso de la CPU 100 veces (una vez por elemento) para un retraso máximo de 50 segundos. El tiempo de retraso es linealmente proporcional al uso de la CPU. En CPUStartPercent, el retraso es 0 (un rendimiento de subprocesos) y aumenta linealmente hasta 500 ms al 100 % de uso de la CPU. Dado que las directivas de limitación se aplican a todos los usuarios de Exchange, es poco probable que el uso de CPU supere el límite de CPUStartPercent en un servidor de acceso de cliente de Exchange, ya que los usuarios individuales o las aplicaciones no pueden obtener el uso de CPU suficiente para afectar al funcionamiento del servidor.

En la tabla siguiente se enumeran los parámetros de directiva de limitación que afectan a las aplicaciones que usan EWS.

Tabla 1: Parámetros de directiva de limitación que afectan a EWS

Nombre del parámetro de directiva de limitación Se aplica a Descripción
DiscoveryMaxConcurrency Exchange 2013 Exchange Online Especifica el número de conexiones de búsqueda de detección simultáneas que un usuario puede realizar a la vez.
DiscoveryMaxKeywords Exchange 2013 Exchange Online Especifica el número máximo de palabras clave que un usuario puede incluir en una búsqueda de detección.
DiscoveryMaxKeywordsPerPage Exchange 2013 Exchange Online Especifica el número de palabras clave para las que se muestran las estadísticas.
DiscoveryMaxMailboxes Exchange 2013 Exchange Online Especifica el número máximo de buzones de origen que un usuario puede incluir en una búsqueda de detección.
DiscoveryMaxMailboxesResultsOnly Exchange 2013 Exchange Online Especifica el número máximo de buzones de correo que puede buscar en una búsqueda In-Place de exhibición de documentos electrónicos sin poder ver las estadísticas.
DiscoveryPreviewSearchResultsPageSize Exchange 2013 Exchange Online Especifica el número de mensajes devueltos en una respuesta de vista previa de búsqueda de exhibición de documentos electrónicos.
EwsCutoffBalance Exchange 2013 Exchange Online Define los límites de consumo de recursos para el usuario EWS antes de que ese usuario no pueda realizar operaciones en un componente específico.
EwsMaxBurst Exchange 2013 Exchange Online Define la cantidad de tiempo que un usuario de EWS puede consumir una cantidad elevada de recursos antes de que se le limite. Este valor se mide en milisegundos. y se establece por separado para cada componente.
EwsRechargeRate Exchange 2013 Exchange Online Define la velocidad a la que se recarga el presupuesto de un usuario EWS (el presupuesto aumenta) durante el tiempo de vigencia del presupuesto.
EWSMaxSubscriptions Exchange 2010 Exchange 2013 Exchange Online Define el número máximo de suscripciones disponibles de notificaciones de inserción, extracción y streaming que un usuario puede tener en un servidor de acceso de cliente específico a la vez. Este presupuesto es diferente para las distintas versiones de Exchange.
EWSFastSearchTimeoutInSeconds Exchange 2010 Define la cantidad de tiempo en segundos que las búsquedas rápidas realizadas mediante la búsqueda de Exchange en EWS continúan antes de que se agote el tiempo de espera. Las búsquedas rápidas se realizan mediante una cadena de consulta de sintaxis de consulta avanzada (AQS) en una operación FindItem.
EWSFindCountLimit Exchange 2010 Exchange 2013 Exchange Online Define el número máximo de elementos de una operación FindItem o una operación FindFolder que pueden existir en la memoria en el servidor de acceso de cliente al mismo tiempo para un usuario. El valor predeterminado de esta propiedad es 1000. El valor de reserva de este valor es 1000. En Exchange Online y versiones locales de Exchange a partir de Exchange 2013, un cmdlet no puede consultar ni configurar esta directiva de limitación. En Exchange Online y versiones locales de Exchange a partir de Exchange 2013, el EWSFindCountLimit para la búsqueda de AQS y cualquier búsqueda Exchange con una restricción son 250 resultados. Una búsqueda de Exchange sin restricción devolverá hasta 1000 resultados.
EWSPercentTimeInAD Exchange 2010 Define el porcentaje de tiempo por minuto durante el cual un usuario específico puede ejecutar solicitudes de Active Directory.
EWSPercentTimeInCAS Exchange 2010 Define el porcentaje de tiempo por minuto durante el cual un usuario específico puede ejecutar código de servidor de acceso de cliente.
EWSPercentTimeInMailboxRPC Exchange 2010 Define el porcentaje de tiempo por minuto durante el cual un usuario específico puede ejecutar solicitudes RPC de buzón
EWSMaxConcurrency Exchange 2010 Exchange 2013 Exchange Online Define el número de conexiones abiertas simultáneas que un usuario específico puede tener en un servidor Exchange que usa EWS al mismo tiempo. El valor predeterminado para Exchange 2010 es 10. El valor predeterminado para Exchange 2013 y Exchange Online es 27. Esta directiva se aplica a todas las operaciones excepto a las notificaciones de streaming. Las notificaciones de streaming usan HangingConnectionLimit para indicar el número de conexiones abiertas de eventos de streaming que están disponibles. Para obtener más información, consulte ¿Qué valores de limitación debo tener en cuenta?
MessageRateLimit Exchange 2010 Exchange 2013 Exchange Online Define el número de mensajes por minuto que se pueden enviar.
RecipientRateLimit Exchange 2010 Exchange 2013 Exchange Online Define el límite del número de destinatarios a los que un usuario puede dirigirse en un período de 24 horas.
ForwardeeLimit Exchange 2010 Exchange 2013 Exchange Online Define el límite del número de destinatarios para las acciones de reenvío o redireccionamiento de la Bandeja de entrada en un período de 24 horas.
ConcurrentSyncCalls Exchange 2019 Exchange 2016 Exchange Online Define el límite del número de llamadas de sincronización simultáneas (SyncFolderHierarchy, SyncFolderItems) para un usuario.

Precaución

No establezca las directivas de limitación en null. Esto establecerá la directiva en igual ilimitado, lo que indica que no se ha establecido una directiva de limitación.

Mostrar las directivas que se aplican a los buzones de correo de Exchange

Exchange local proporciona cmdlets de Exchange del Shell de administración que puede usar para establecer y obtener la directiva de limitación. Exchange Online proporciona acceso a los cmdlets de la directiva de limitación.

Use los siguientes cmdlets para mostrar las directivas de limitación para una implementación de Exchange Server local:

  • Get-ThrottlingPolicy: obtiene la configuración de limitación de cliente para una o más directivas de limitación. Para obtener más información, consulte Get-ThrottlingPolicy en TechNet.

  • Get-ThrottlingPolicyAssociation: permite ver la relación entre un objeto y sus directivas de limitación asociadas. El objeto puede ser un usuario con buzón de correo, un usuario sin buzón de correo o un contacto. Para obtener más información, consulte Get-ThrottlingPolicyAssociation en TechNet.

Use el siguiente comando para mostrar la directiva de limitación predeterminada para Exchange 2010.

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

Use el siguiente comando para mostrar la directiva de limitación global (que equivale a la directiva de limitación predeterminada en Exchange 2010) en Exchange 2013.

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

Use el siguiente comando para mostrar la directiva de limitación asociada a un usuario en Exchange 2010 o Exchange 2013. Reemplace el nombre john@contoso.com de usuario por el nombre de usuario del usuario de destino para el que desea obtener información de directiva de limitación.

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

La ejecución de este comando en el Shell de administración de Exchange da como resultado una salida similar al siguiente.

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

Nota:

Cuando la propiedad ThrottlingPolicyId está en blanco, la directiva predeterminada se aplica al buzón.

Puede establecer la directiva de limitación en un servidor Exchange mediante los cmdlets Set-ThrottlingPolicy y Set-ThrottlingPolicyAssociation. Puede crear y quitar directivas de limitación no predeterminadas mediante los cmdlets New-ThrottlingPolicy y Remove-ThrottlingPolicy.

Sugerencia

Se recomienda diseñar las aplicaciones para que se adhieran a la directiva de limitación predeterminada. Realice solo cambios en las directivas de limitación predeterminadas si el diseño de la aplicación cliente no puede adaptarse a la directiva predeterminada. Tenga en cuenta que las directivas de limitación menos restrictivas pueden afectar negativamente a la confiabilidad del servicio.

Consideraciones de limitación para aplicaciones que usan la suplantación de EWS

La suplantación es un método de autorización que permite que una sola cuenta tenga acceso a muchas cuentas. Cuando una cuenta de servicio suplanta a los usuarios, actúa como usuarios y, por lo tanto, asume los derechos que se asignan a esos usuarios. Los archivos de registro registran el acceso como el usuario suplantado. Los administradores usan el control de acceso basado en roles (RBAC) para configurar la suplantación mediante el Shell de administración de Exchange.

Cuando se usa la suplantación, los presupuestos de todos los umbrales de limitación se aplican de forma diferente en función de la versión de Exchange. El presupuesto se calcula en función de la cuenta suplantada o de la cuenta de servicio. Si la aplicación tiene varios subprocesos y realiza solicitudes simultáneas en varios buzones, debe considerar cómo afectará el umbral de limitación al rendimiento de la aplicación. En general, tenga en cuenta los siguientes límites en las cuentas de servicio al crear una aplicación basada en servicios que usa la suplantación para acceder a todos los buzones:

  • Al usar la suplantación, la cuenta de servicio tiene un presupuesto independiente para los siguientes parámetros de directiva:

    • EWSMaxConcurrency
    • EWSPercentTimeInAD
    • EWSPercentTimeInCAS
    • EWSPercentTimeInMailboxRPC
    • EWSMaxSubscriptions
    • EWSFastSearchTimeoutInSeconds
    • EWSFindCountLimit
  • El presupuesto EWSMaxConcurrency se comparte para la cuenta de servicio y la cuenta que se suplanta para todas las conexiones a versiones de Exchange anteriores a Exchange 2010 Service Pack 2 (SP2) Paquete acumulativo de actualizaciones 4 (RU4). A partir de Exchange 2010 SP2 RU4 e incluyendo Exchange Online, el acceso a la cuenta de servicio usa un presupuesto independiente del presupuesto EWSMaxConcurrency del usuario. Para obtener más información acerca de la actualización Exchange la directiva de limitación de conexiones simultáneas para EWS, vea Descripción del paquete acumulativo de actualizaciones 4 para Exchange Server 2010 Service Pack 2.

    Las notificaciones de streaming de EWS en versiones de Exchange a partir de Exchange 2010, e incluido Exchange Online, tienen un presupuesto adicional EWSMaxConcurrency clonado de todas las demás conexiones de cliente EWS. Las conexiones de notificación de streaming se cuentan con un presupuesto independiente que todas las demás operaciones de EWS. El presupuesto de concurrencia máxima de notificación de streaming es en realidad dos presupuestos diferentes: un presupuesto para todas las cuentas de servicio y un presupuesto para la cuenta que se va a suplantar. Las notificaciones de streaming en Exchange Online y versiones de Exchange a partir de Exchange 2013 usan HangingConnectionLimit para limitar el número de conexiones.

    Por ejemplo, supongamos que EWSMaxConcurrency es igual a cinco. Un usuario puede tener cinco conexiones de notificación de extracción abiertas, mientras que una cuenta de servicio puede tener cinco conexiones simultáneas de notificación de extracción en el buzón del usuario al mismo tiempo que el usuario.

  • En la siguiente tabla se identifica cómo se calculan los presupuestos de limitación de EWSMaxSubscriptions entre la cuenta de servicio y la cuenta que se va a suplantar.

    Tabla 2: Contabilidad presupuestada EWSMaxSubscriptions

    Versión de Exchange EWSMaxSubscriptions limitación de la contabilidad presupuestada
    Exchange Online Se carga en el buzón de destino.
    Exchange 2013 Se carga en el buzón de destino.
    Exchange 2010 SP3 Se carga en el buzón de destino.
    Exchange 2010 SP2 Se carga en la cuenta de llamada. A partir de Exchange 2010 SP2 RU4, el presupuesto se carga en el buzón de destino.
    Exchange 2010 SP1 Se carga en la cuenta de llamada.
    Exchange 2010 Se carga en la cuenta de llamada.
  • Dado que el presupuesto de limitación EWSMaxSubscriptions se carga en la cuenta que se está suplantando, no hay ningún límite en el número de buzones a los que una cuenta de servicio puede suscribirse y recibir notificaciones de streaming, siempre que se esté utilizando la suplantación. Para la cuenta que se va a suplantar, no puede tener más de n solicitudes simultáneas por buzón de destino, donde n es el valor EWSMaxSubscriptions. Si no usaba la suplantación, la misma cuenta de servicio no podía tener más de n solicitudes simultáneas totales. Por lo tanto, lo más importante es que al usar la suplantación en una cuenta de servicio, aumente exponencialmente el número de buzones que puede atender. Para obtener más información, consulte Mantener la afinidad entre un grupo de suscripciones y el servidor de buzón de Exchange.

  • Los parámetros de directiva EWSPercentTimeInMailboxRPC, EWSPercentTimeInCAS y EWSPercentTimeInAD hacen referencia a las acciones realizadas por un único subproceso. Cuando una aplicación realiza varias operaciones simultáneas, debe tener en cuenta el efecto acumulado de estas operaciones en el presupuesto de recursos del usuario.

Implicaciones de limitación para solicitudes por lotes de EWS

EWS permite procesar por lotes varias solicitudes de elementos en una única solicitud ejecutada por el servidor de acceso de cliente. Esto permite mayor eficiencia y rendimiento. Cuando un servidor Exchange ejecuta una solicitud por lotes, comprueba el presupuesto del usuario después de la ejecución de cada elemento dentro del lote. Si la aplicación supera el presupuesto, el procesamiento del siguiente elemento del lote se retrasa hasta que se haya recargado el presupuesto para ese usuario. Para asegurarse de que las aplicaciones que usan operaciones por lotes se ejecutan correctamente, limite el número de solicitudes de elementos que se pueden incluir en un solo lote y divida lotes grandes entre varios lotes más pequeños para aumentar la confiabilidad de los resultados. El efecto que una operación por lotes tiene en determinados umbrales de limitación depende del tipo de solicitud, el tamaño de los elementos que se procesarán (por ejemplo, en las operaciones UploadItems o ExportItems ) y el contenido del buzón. Las directivas de limitación afectan a las operaciones por lotes, ya que la solicitud tarda más en procesarse. Por lo tanto, el autor de la llamada tendrá que esperar más tiempo para la respuesta y, dado que EWS limita el tiempo de ejecución de una solicitud por lotes a un minuto, podría agotarse el tiempo de espera.

Para determinar el tamaño de lote óptimo para una aplicación, realice pruebas unitarias con varios conjuntos de entrada para asegurarse de que la aplicación no encuentra ningún error en un entorno de producción.

Parámetros de directiva de limitación que afectan a las operaciones de búsqueda de EWS

Las operaciones de búsqueda en EWS pueden requerir grandes cantidades de tiempo y recursos, en función de cómo se ejecute la búsqueda y de la información que se solicite. Para controlar el uso de recursos durante las búsquedas, surten dos parámetros de directiva: EWSFastSearchTimeoutInSeconds y EWSFindCountLimit.

El parámetro de directiva EWSFastSearchTimeoutInSeconds especifica la cantidad de tiempo, en segundos, en las que las búsquedas rápidas de EWS (también conocidas como búsqueda de indización de contenido) se ejecutan antes de agotarse el tiempo de espera. Una búsqueda rápida es una búsqueda realizada mediante una cadena de consulta de sintaxis de consulta avanzada (AQS) en una operación FindItem.

Puede buscar en una carpeta de buzón de correo de Exchange de dos maneras:

  • Mediante el uso de una búsqueda de almacenamiento de Exchange, que realiza un examen secuencial de todos los mensajes en el ámbito de búsqueda de destino.

  • Mediante el uso del servicio Search de Exchange (indexación de contenido).

Ambos tipos de búsquedas pueden provocar que se agote el tiempo de espera. Cuando sea posible, use el servicio Search de Exchange, ya que estas búsquedas suelen estar dirigidas a índices de buzones de correo y usan consultas de AQS. En el ejemplo siguiente se muestra cómo realizar una búsqueda de AQS de la Bandeja de entrada mediante EWS y el servicio Search de Exchange.

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

Si no puede usar una búsqueda de AQS, evite usar filtros de búsqueda demasiado complejos. También intente evitar la creación de filtros de búsqueda basados en valores calculados si la consulta implica propiedades MAPI extendidas. La búsqueda de AQS se introdujo en Exchange 2010.

Nota:

La primera vez que ejecuta una consulta de búsqueda compleja del almacén de Exchange, se ejecuta muy lentamente y puede agotar el tiempo de espera. Después, la consulta responderá más rápido. Para obtener más información acerca de los procesos del servidor de Exchange back-end que se producen durante las consultas de búsqueda del almacén de Exchange, consulte Descripción del impacto en el rendimiento de los recuentos elevados de elementos y las vistas restringidas en TechNet. El uso de un SearchFilter crea una restricción dinámica que ayuda a consultas similares en el futuro, pero como estas restricciones son dinámicas en la naturaleza, no son permanentes ni confiables y se eliminan después de un máximo de tres días.

El parámetro de directiva EWSFindCountLimit especifica el número máximo de elementos de los resultados de una operación FindItem o FindFolder que puede existir en la memoria en un servidor de acceso de cliente al mismo tiempo para un usuario. Cada elemento o carpeta que EWS procesa en una solicitud FindItem o FindFolder se cuenta con respecto al presupuesto especificado en el elemento EWSFindCountLimit. Cuando la respuesta se envía de nuevo al solicitante, se libera el cargo de recuento de buscar para la llamada actual. La respuesta que el servidor devuelve a un solicitante cuando se supera el presupuesto se basa en el valor del elemento RequestServerVersion y en si el solicitante especificó la paginación. Cuando el valor del elemento RequestServerVersion indica Exchange 2010 o una versión anterior de Exchange, el servidor envía una respuesta de error con el código de error ErrorServerBusy. Si el valor del elemento RequestServerVersion indica una versión de Exchange a partir de Exchange 2010 SP1 o Exchange Online y el cliente usa paginación, EWS puede devolver un conjunto de resultados parcial en lugar de un error. La aplicación debe esperar que EWS no devuelva todos los elementos. Si el valor del elemento IncludesLastItemInRange es false, la aplicación debe realizar otra solicitud FindItem o FindFolder con el nuevo desplazamiento y continuar hasta que el elemento IncludesLastItemInRange devuelva true.

Cuando se usa una operación FindItem o FindFolder, es importante usar la paginación. La API administrada de EWS aplica el uso de paginación, pero si usa otros métodos, como objetos de proxy EWS o SOAP sin formato, debe establecer explícitamente la paginación. En el ejemplo siguiente se muestra cómo usar la paginación en la API administrada de EWS.

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

Nota:

La directiva predeterminada de Exchange limita el tamaño de página a 1000 elementos. Establecer el tamaño de página en un valor mayor que este número no tiene ningún efecto práctico.

Las aplicaciones también deben tener en cuenta el hecho de que el valor del parámetro de limitación EWSFindCountLimit puede provocar que se devuelva un conjunto de resultados parcial para las aplicaciones que realizan solicitudes simultáneas. En el ejemplo siguiente se muestra cómo usar la propiedad MoreAvailable en la API administrada de EWS para asegurarse de que todos los resultados se incluyen en una 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);

Limitación de directivas y simultaneidad

La simultaneidad hace referencia al número de conexiones de un usuario específico. Una conexión se mantiene desde el momento en que se recibe una solicitud hasta que se envía una respuesta al solicitante. Si los usuarios intentan efectuar más solicitudes simultáneas de las que permite su directiva, el nuevo intento de conexión dará error. Sin embargo, las conexiones existentes siguen siendo válidas. Las directivas de limitación pueden afectar a la simultaneidad de varias maneras diferentes.

El parámetro de directiva de limitación EWSMaxConcurrency establece el número de conexiones simultáneas que un usuario específico puede tener en un servidor Exchange al mismo tiempo. Para determinar el número máximo de conexiones simultáneas que se van a permitir, tenga en cuenta las conexiones que usarán los clientes de Outlook. Outlook 2007 y Outlook 2010 usan EWS para obtener acceso a la información de disponibilidad y fuera de la oficina (OOF). Mac Outlook 2011 usa EWS para todas las funciones de acceso de cliente. Según el número de clientes de Outlook que se conectan activamente al buzón de un usuario, el número de conexiones simultáneas disponibles para un usuario podría estar limitado. Además, si la aplicación tiene que conectarse a varios buzones simultáneamente mientras usa un único contexto de seguridad, es importante tener en cuenta el valor de la directiva EWSMaxConcurrency. Para obtener más información acerca del uso de un único contexto de seguridad con conexiones simultáneas, consulte Consideraciones de limitación para las aplicaciones que usan la suplantación de EWS anteriormente en este artículo.

Las aplicaciones que se conectan simultáneamente a varios buzones de correo deben poder realizar un seguimiento del uso de recursos en el lado cliente. Dado que las operaciones de EWS están basadas en solicitudes o respuestas, puede asegurarse de que las aplicaciones funcionen bien dentro del umbral de EWSMaxConcurrency mediante el seguimiento del número de conexiones que se producen entre el inicio de una solicitud y el momento en el que se recibe la respuesta y asegurarse de que no se produzcan más de diez solicitudes abiertas simultáneamente.

El parámetro de directiva EWSFindCountLimit especifica el tamaño máximo de resultado que puede usar una operación FindItem o FindFolder en un servidor de acceso de cliente al mismo tiempo para un usuario. Si una aplicación (o potencialmente varias aplicaciones) realiza dos solicitudes FindItem de EWS simultáneas que devuelven 100 elementos cada una para un usuario específico, el cargo EWSFindCountLimit en el presupuesto de ese usuario específico será de 200. Cuando se devuelve la primera solicitud, el presupuesto baja a 100 y, cuando se devuelve la segunda solicitud, el presupuesto baja a cero. Si la misma aplicación realizara dos solicitudes simultáneas para 1000 elementos, el valor presupuestado sería de 2000 elementos, que supera el valor EWSFindCountLimit. Si el presupuesto del usuario para los elementos cae por debajo de cero, la siguiente solicitud genera un error hasta que el presupuesto del usuario se recarga en uno o más.

Consideraciones de limitación para aplicaciones de notificación de EWS

Si está creando aplicaciones de notificación de EWS que usan notificaciones de inserción, extracción o streaming, debe tener en cuenta las implicaciones de EWSMaxSubscriptions y las directivas de limitación EWSMaxConcurrency y HangingConnectionLimit.

El parámetro de directiva EWSMaxSubscriptions especifica el número máximo de suscripciones activas de inserción, extracción y streaming que un usuario puede tener en un servidor de acceso de cliente específico al mismo tiempo. Las diferentes versiones de Exchange tienen valores predeterminados diferentes para este parámetro. Un usuario puede suscribirse a todas las carpetas de un buzón de correo mediante la propiedad SubscribeToAllFolders, que usa una única suscripción con el presupuesto EWSMaxSubscriptions. Los usuarios pueden suscribirse a carpetas individuales, con cada suscripción de carpeta contando para el presupuesto EWSMaxSubscriptions, hasta el límite establecido por el valor del parámetro EWSMaxSubscriptions (por ejemplo, los usuarios pueden suscribirse a 20 carpetas de calendario en distintos buzones si EWSMaxSubscriptions está establecido en 20).

Para obtener información sobre la suplantación y el parámetro EWSMaxSubscriptions, consulte Consideraciones de limitación para las aplicaciones que usan la suplantación de EWS anteriormente en este artículo.

El parámetro de directiva EWSMaxConcurrency también puede ser un problema para las notificaciones de EWS; por ejemplo:

  • Cuando EWS incrementa el recuento de conexiones para el propietario de la suscripción mientras una suscripción de inserción genera la notificación.

  • Cuando una aplicación está diseñada para escuchar los buzones de varios usuarios y los usuarios reciben notificaciones simultáneas para una instancia de un mensaje que se envía a una lista de distribución.

Si la aplicación de notificación tiene varios subprocesos y realiza solicitudes de conexión simultáneas para obtener más información sobre un mensaje concreto que recibió una cuenta de usuario, se puede superar el límite de directiva EWSMaxConcurrency. Para tener en cuenta esto, considere la posibilidad de supervisar las conexiones simultáneas de la aplicación, incluidas las que puede usar el servidor, e implementar la puesta en cola de solicitudes en el cliente.

HangingConnectionLimit solo se aplica a las notificaciones de streaming. Este límite se establece en el archivo web.config, lo que significa que un administrador de Exchange puede establecer este valor en un servidor Exchange local, pero los buzones de Exchange Online deben usar el valor predeterminado para este límite, que es 10 para Exchange Online, Exchange 2019, Exchange 2016 y 3 para Exchange 2013. Para obtener más información, consulte ¿Qué valores de limitación debo tener en cuenta?.

Limitación de directivas y rendimiento de aplicaciones

Los tres parámetros siguientes de la directiva de limitación PercentTimeIn afectan a la cantidad de tiempo que una aplicación EWS puede consumir en un servidor de acceso de cliente:

  • EWSPercentTimeInAD
  • EWSPercentTimeInCAS
  • EWSPercentTimeInMailboxRPC

Los valores especificados en los parámetros de directiva PercentTimeIn indican la cantidad de tiempo que se asigna un subproceso que realiza una solicitud. Por ejemplo, suponiendo un valor EWSPercentTimeInCAS de 90, si un proceso realiza dos solicitudes simultáneas que pasan 54 segundos por cada código en ejecución en el servidor de acceso de cliente, el proceso usa 108 segundos en una ventana de 60 segundos. Esto representa un valor de parámetro EWSPercentTimeInCAS del 180 por ciento.

Nota:

El valor del parámetro EWSPercentTimeInCAS es un superconjunto superpuesto de los valores de los parámetros EWSPercentTimeInAD y EWSPercentTimeInMailboxRPC. Esto significa que el gasto en tiempo de procesamiento del servidor de acceso de cliente siempre será mayor que los gastos de EWSPercentTimeInAD y EWSPercentTimeInMailboxRPC. Esto se debe a que, para que el componente de Exchange realice una llamada de Active Directory o RPC, ya debe ejecutar código de servidor de acceso de cliente. Además, el gasto en tiempo de procesamiento de EWSPercentTimeInCAS no se detiene mientras se realizan llamadas LDAP o RPC. Aunque la solicitud puede estar esperando sincrónicamente una respuesta de servicios de dominio de Active Directory (AD DS) o el almacén de Exchange, el proceso sigue consumiendo un subproceso en el servidor y, por lo tanto, el subproceso debe seguir cobrando por ese uso.

La cantidad de tiempo de CPU que una aplicación puede tardar en un período de 60 segundos puede superar estos límites; por lo tanto, es importante tener en cuenta el volumen y el tipo de solicitudes que se están haciendo. Por ejemplo, un gran lote de operaciones ResolveNames que se realizan simultáneamente puede superar el valor del parámetro de directiva EWSPercentTimeInAD. Los valores de directiva contenidos en la directiva de limitación predeterminada están diseñados para permitir que la mayoría de las aplicaciones EWS funcionen sin problemas; sin embargo, cuando las aplicaciones multiproceso de gran volumen colocan un gran volumen de solicitudes en un servidor de acceso de cliente determinado, esto puede crear problemas. Para evitar esto, considere la posibilidad de limitar el tamaño de los lotes que se van a ejecutar en el servidor.

Directivas y aplicaciones de limitación que envían un gran volumen de correos electrónicos

Las directivas de limitación predeterminadas incluyen tres parámetros de directiva de límite de velocidad que pueden afectar a las aplicaciones que usan EWS para enviar un gran volumen de mensajes o enviar mensajes en lotes grandes en un breve período de tiempo.

Nota:

En general, se recomienda no usar EWS para enviar correo electrónico masivo. Use un host SMTP que se especialice en servicios de correo masivo para enviar mensajes de correo masivo frecuentes de gran tamaño.

El parámetro de directiva MessageRateLimit especifica el número de mensajes por minuto que puede enviar cualquier cliente de Exchange, incluido EWS. De forma predeterminada, esta directiva se establece en 30 mensajes por minuto en Exchange Online (es ilimitada en Exchange Server). Para los usuarios normales en Exchange Online, este límite de frecuencia suele ser suficiente. Sin embargo, las aplicaciones que envían grandes lotes de mensajes de correo electrónico, por ejemplo, como parte de un programa de facturación, pueden tener problemas. Cuando se supera este límite de directivas, se retrasa la entrega de mensajes para el buzón. En concreto, los mensajes aparecerán en la carpeta Bandeja de salida o en Borradores durante períodos de tiempo más largos cuando un usuario o aplicación envíe un número mayor de mensajes que el valor especificado por el parámetro MessageRateLimit. Asegúrese de tener esto en cuenta al desarrollar un sistema de seguimiento de entrega, especialmente si la aplicación usa un buzón al que los usuarios se conectan a través de Outlook. Cuando los elementos diferidos se almacenan en la carpeta Bandeja de salida o en borradores, los usuarios pueden interpretarlo como un error.

El parámetro de directiva RecipientRateLimit especifica el límite en el número de destinatarios a los que un usuario puede dirigirse en un período de 24 horas. Por ejemplo, si este valor se establece en 500, significa que una única cuenta de buzón de correo Exchange puede enviar mensajes a no más de 500 destinatarios cada día. Este límite se aplica a los mensajes a destinatarios que están dentro y fuera de la organización. Este límite predeterminado puede causar problemas para algunas aplicaciones de línea de negocio que hacen que se ejecute una factura de fin de mes y necesitan enviar mensajes a más de este número de destinatarios. Puede usar servicios externos que habiliten el procesamiento por lotes de mensajes o soluciones de retransmisión de salida locales independientes para evitar esta limitación.

El parámetro de directiva ForwardeeLimit especifica el número máximo de destinatarios a los que se pueden reenviar o redirigir mensajes mediante reglas de la bandeja de entrada. Este parámetro no limita el número de mensajes que se pueden reenviar o redirigir a los destinatarios.

Errores generados cuando se superan los límites de limitación

Cuando se superan las directivas de limitación, EWS genera uno de los errores enumerados en la tabla siguiente.

Tabla 3: Errores de límite de limitación

Error Parámetro de directiva de limitación Descripción
ErrorExceededConnectionCount EWSMaxConcurrency Indica que hay más solicitudes simultáneas en el servidor de las permitidas por la directiva de un usuario.
ErrorExceededSubscriptionCount EWSMaxSubscriptions Indica que se ha superado el recuento máximo de suscripción de una directiva de limitación de usuarios.
ErrorExceededFindCountLimit EWSFindCountLimit Indica que una llamada de operación de búsqueda ha excedido el número total de elementos que se pueden devolver.
ErrorServerBusy EWSPercentTimeInMailboxRPC
EWSPercentTimeInCAS
EWSPercentTimeInAD
Se produce cuando el servidor está ocupado. El valor BackOffMilliseconds devuelto con errores ErrorServerBusy indica al cliente la cantidad de tiempo que debe esperar hasta que vuelva a enviar la solicitud que provocó la respuesta que devolvió este código de error.

En la tabla siguiente se enumeran los códigos de estado HTTP que se devuelven mediante errores de limitación.

Tabla 4: Códigos de estado HTTP devueltos por errores de limitación

Código de estado HTTP Descripción
HTTP 503 Indica que las solicitudes EWS están en cola con IIS. El cliente debe retrasar el envío de solicitudes adicionales hasta una hora posterior.
HTTP 500 Indica un error interno del servidor con el código de error ErrorServerBusy. Esto indica que el cliente debe retrasar el envío de solicitudes adicionales hasta más adelante. La respuesta puede contener una sugerencia de desuso denominada BackOffMilliseconds. Si está presente, el valor de BackOffMilliseconds debe usarse como duración hasta que el cliente vuelva a enviar una solicitud.
HTTP 200 Contiene una respuesta de error basada en esquema EWS con un código de error ErrorInternalServerError. Es posible que haya un código de error ErrorServerBusy interno. Esto indica que el cliente debe retrasar el envío de solicitudes adicionales hasta más adelante.

Vea también