EWS регулирование в Exchange

Сведения о политиках регулирования, влияющих на EWS при использовании Exchange.

Предоставили: Глен Скейлс (Glen Scales); Майкл Мейнер (Michael Mainer), корпорация Майкрософт

В статье описывается регулирование EWS в Exchange Online, Exchange Online в составе Office 365 и локальных версий Exchange начиная с Exchange 2010. Регулирование в Exchange помогает обеспечить надежность и доступность сервера, ограничивая количество ресурсов сервера, которые может потреблять один пользователь или приложение. Регулирование — это реагирующий отклик на чрезмерное использование системных ресурсов, которое может повлиять на надежность и функциональность службы. Exchange постоянно отслеживает состояние ключевых инфраструктурных ресурсов, таких как базы данных почтовых ящиков. При обнаружении факторов высокой нагрузки, которые ухудшают производительность этих ресурсов, подключения EWS регулируются пропорционально вкладу каждого потребителя в создание этой высокой нагрузки. В результате пользователь оказывается под ограничением на потребление ресурсов и может ощущать замедление до тех пор, пока состояние ресурсов не вернется к рабочему уровню.

У каждого протокола клиентского доступа в Exchange, включая EWS, имеется политика регулирования. При разработке приложений с использованием EWS важно учитывать политики регулирования, чтобы обеспечить надежность приложений и работоспособность сервера Exchange Server. В этой статье определены различные политики регулирования и ограничения служб для EWS, которые действуют как для Exchange Online, так и для версий локальной среды Exchange начиная с Exchange Server 2010. В этой статье также рассматриваются различия политик регулирования в различных версиях Exchange.

Важно!

Политика регулирования по умолчанию, доступ к политике регулирования и конфигурация политики регулирования различны в Exchange Online и локальной среде Exchange. Конкретные значения параметров регулирования действительны только для определенной версии Exchange. Поскольку параметры в разных версиях различны, а администраторы Exchange могут изменять политики регулирования по умолчанию для локального развертывания, значения параметров по умолчанию не представлены в этой статье. Для вас важнее знать, на что следует обращать внимание при разработке приложения, которое должно работать в пределах ограничений регулирования и правильно реагировать на сценарии регулирования.

Разработчику приложений, необходимо учитывать регулирование при создании приложения. В различных версиях Exchange приняты различные значения по умолчанию для параметров регулирования EWS. Клиентские приложения и приложения-службы, рассчитанные на доступ к различным версиям Exchange, должны учитывать эти параметры, независимо от того, значения ли это по умолчанию, настраиваемые значения, установленные администратором Exchange или, как в Exchange Online, установленные по умолчанию и необнаруживаемые. Так как значения параметров регулирования не могут быть обнаружены программным путем, проектные спецификации клиента должны включать план адаптации приложения к различным потенциальным ограничениям регулирования. При разработке многопоточных приложений, которые будут иметь доступ к большому количеству почтовых ящиков, или когда многие клиенты имеют доступ к одному и том же почтовому ящику, учитывайте ограничения на параллелизм, которые политика по умолчанию применяет к Exchange.

Политики регулирования, влияющие на EWS

Политики регулирования в Exchange влияют не только на EWS, но и на все клиентские подключения к Exchange Server, включая протоколы, используемые в Office Outlook, Outlook Web App и Exchange ActiveSync.

Политика регулирования CPUStartPercent может влиять на производительность EWS при использовании Exchange 2010. Если средний уровень загрузки ЦП процессами Exchange, запущенными на сервере клиентского доступа, включая, в частности, процесс EWS, превышает значение, указанное этой политикой, входящие запросы будут откладываться для сокращения загрузки ЦП. Вы не можете изменить значение этой политики, но знание о нем поможет устранить проблемы с производительностью. Сервер клиентского доступа определяет это значения, вычисляя среднее значение в пределах скользящего интервала длительностью 10 секунд. Это позволяет процессу адекватно реагировать на быстрые всплески загрузки ЦП. При превышении этого порогового значения входящие подключения к EWS задерживаются. Эта задержка не превышает 500 миллисекунд (мс) при 100% теоретической загрузке ЦП для запроса EWS. Если поступит пакетный запрос EWS на получение 100 элементов, сервер будет проверять уровень загрузки ЦП 100 раз (один раз на каждый элемент) с максимальной задержкой 50 секунд. Время задержки линейно пропорционально загрузке ЦП. В CPUStartPercent задержка составляет 0 (в целом по потоку) и линейно увеличивается до 500 мс при 100% загрузке ЦП. Поскольку политики регулирования применяются ко всем пользователям Exchange, маловероятно, что уровень загрузки ЦП превысит ограничение CPUStartPercent на сервере клиентского доступа Exchange, так как отдельные пользователи или приложения не смогут дать достаточную загрузку ЦП, чтобы повлиять на работу сервера.

В следующей таблице перечислены параметры политики регулирования, влияющие на приложения, которые используют EWS.

Таблица 1. Параметры политики регулирования, влияющие на EWS

Имя параметра политики регулирования Относится к Описание
DiscoveryMaxConcurrency Exchange 2013 Exchange Online Указывает количество подключений поиска при обнаружении, которые одновременно могут быть у пользователя.
DiscoveryMaxKeywords Exchange 2013 Exchange Online Указывает максимальное количество ключевых слов, которые пользователь может включать в поиск при обнаружении.
DiscoveryMaxKeywordsPerPage Exchange 2013 Exchange Online Указывает количество ключевых слов, для которых нужно показывать статистику.
DiscoveryMaxMailboxes Exchange 2013 Exchange Online Указывает максимальное количество исходных почтовых ящиков, которые пользователь может включать в поиск при обнаружении.
DiscoveryMaxMailboxesResultsOnly Exchange 2013 Exchange Online Указывает максимальное число почтовых ящиков для поиска при обнаружении электронных данных на месте без возможности просмотра статистики.
DiscoveryPreviewSearchResultsPageSize Exchange 2013 Exchange Online Указывает количество сообщений, возвращаемых в ответе с результатами поиска на обнаружение электронных данных.
EwsCutoffBalance Exchange 2013 Exchange Online Определяет ограничения на потребление ресурсов пользователем EWS перед окончательным запретом на работу с определенным компонентом.
EwsMaxBurst Exchange 2013 Exchange Online Определяет время, в течение которого пользователь EWS может потреблять повышенное количество ресурсов до того, как сработает регулирование. Значение измеряется в миллисекундах. Это значение устанавливается отдельно для каждого компонента.
EwsRechargeRate Exchange 2013 Exchange Online Определяет темп пополнения бюджета пользователя EWS в течение бюджетного времени.
EWSMaxSubscriptions Exchange 2010 Exchange 2013 Exchange Online Определяет максимальное количество активных подписок на push-уведомление, уведомление по запросу и потоковое уведомление, которые одновременно могут быть у пользователя на определенном сервере клиентского доступа. Бюджет для него выделяется по-разному в разных версиях Exchange.
EWSFastSearchTimeoutInSeconds Exchange 2010 Определяет время в секундах, выделяемое на быстрый поиск с помощью службы поиска Exchange в EWS. Быстрый поиск выполняется с помощью строки запроса в расширенном синтаксисе запросов (AQS) в рамках операции FindItem.
EWSFindCountLimit Exchange 2010 Exchange 2013 Exchange Online Определяет максимальное количество элементов из операции FindItem или FindFolder, которые одновременно могут существовать в памяти на сервере клиентского доступа для одного пользователя. Значение по умолчанию для этого свойства — 1000. Резервное значение для этого значения — 1000. В Exchange Online и локальных версиях Exchange начиная с Exchange 2013 эту политику регулирования нельзя запросить или настроить через командлет. В Exchange Online и локальных версиях Exchange начиная с Exchange 2013. значение EWSFindCountLimit для поиска AQS и любого поиска Exchange с ограничением составляет 250 результатов. Поиск Exchange без ограничения возвращает до 1000 результатов.
EWSPercentTimeInAD Exchange 2010 Определяет процент времени за минуту, в течение которого конкретный пользователь может выполнять запросы Active Directory.
EWSPercentTimeInCAS Exchange 2010 Определяет процент времени за минуту, в течение которого конкретный пользователь может выполнять код сервера клиентского доступа.
EWSPercentTimeInMailboxRPC Exchange 2010 Определяет процент времени за минуту, в течение которого конкретный пользователь может выполнять RPC-запросы почтового ящика.
EWSMaxConcurrency Exchange 2010 Exchange 2013 Exchange Online Определяет количество параллельных открытых подключений к серверу Exchange Server, использующему EWS, которые одновременно могут быть у конкретного пользователя. Значение по умолчанию для Exchange 2010 — 10. Значение по умолчанию для Exchange 2013 и Exchange Online составляет 27. Эта политика применяется ко всем операциям, за исключением потокового уведомления. Потоковые уведомления используют HangingConnectionLimit для указания количества доступных подключений к событиям открытой потоковой передачи. Дополнительные сведения см. в статье Какие значения регулирования надо учитывать?.
MessageRateLimit Exchange 2010 Exchange 2013 Exchange Online Определяет количество сообщений в минуту, которые можно отправлять.
RecipientRateLimit Exchange 2010 Exchange 2013 Exchange Online Определяет ограничение для числа получателей, которым пользователь может адресовать сообщения в течение 24 часов.
ForwardeeLimit Exchange 2010 Exchange 2013 Exchange Online Определяет ограничение количества получателей для действий пересылки/перенаправления в папке "Входящие" в течение 24 часов.
ConcurrentSyncCalls Exchange 2019 Exchange 2016 Exchange Online Определяет ограничение количества одновременных вызовов синхронизации (SyncFolderHierarchy, SyncFolderItems) для пользователя.

Осторожностью

Не следует задавать для политик регулирования значение null. В таком случае политика становится неограниченной, что равносильно не заданной политике регулирования.

Отображение политик, применяемых к почтовым ящикам Exchange

Локальная среда Exchange предоставляет командлеты командной консоли Exchange, с помощью которых можно задавать и узнавать политику регулирования. Exchange Online не предоставляет доступа к командлетам политики регулирования.

Используйте следующие командлеты для отображения политики регулирования в локальном развертывании Exchange Server:

  • Get-ThrottlingPolicy возвращает клиентские параметры регулирования для одной или нескольких политик регулирования. Дополнительные сведения см. в разделе Get-ThrottlingPolicy на сайте TechNet.

  • Get-ThrottlingPolicyAssociation позволяет просмотреть связь между объектом и его политиками регулирования. Объект может быть пользователем с почтовым ящиком, пользователем без почтового ящика или контактом. Дополнительные сведения см. в разделе Get-ThrottlingPolicyAssociation на сайте TechNet.

Используйте следующую команду, чтобы показать политику регулирования по умолчанию для Exchange 2010.

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

Используйте следующую команду, чтобы показать глобальную политику регулирования в Exchange 2013 (которая совпадает с политикой регулирования по умолчанию в Exchange 2010).

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

Используйте следующую команду, чтобы показать политику регулирования, связанную с пользователем в Exchange 2010 или Exchange 2013. Замените имя john@contoso.com пользователя именем целевого пользователя, для которого требуется получить сведения о политике регулирования.

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

Запуск этой команды на командной консоли Exchange дает результат, аналогичный следующему.

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

Примечание.

Если свойство ThrottlingPolicyId пусто, к почтовому ящику применяется политика по умолчанию.

Политику регулирования можно задать на сервере Exchange Server с помощью командлетов Set-ThrottlingPolicy и Set-ThrottlingPolicyAssociation. Политики регулирования по умолчанию можно создавать и удалять с помощью командлетов New-ThrottlingPolicy и Remove-ThrottlingPolicy.

Совет

Рекомендуется разрабатывать приложения так, чтобы они соблюдали политику регулирования по умолчанию. Вносите изменения в политики регулирования по умолчанию только в том случае, если клиентское приложение нельзя адаптировать к политике по умолчанию. Помните, что менее строгие политики регулирования могут отрицательно повлиять на надежность службы.

Рекомендации по учету регулирования для приложений, использующих олицетворение EWS

Олицетворение — это метод авторизации, который позволяет одной учетной записи получать доступ ко многим учетным записям. Когда учетная запись службы олицетворяет пользователей, она выступает в качестве этих пользователей и, следовательно, принимает на себя права, которые им присвоены. В файлах журнала доступ записывается как полученный олицетворенным пользователем. Администраторы используют управление доступом на основе ролей (RBAC) для настройки олицетворения с помощью командной консоли Exchange.

При использовании олицетворения бюджеты для всех пороговых значений регулирования применяются по-разному в зависимости от версии Exchange. Бюджет рассчитывается либо по олицетворяемой учетной записи, либо по учетной записи службы. Если ваше приложение многопоточное и делает одновременные запросы к нескольким почтовым ящикам, следует учитывать возможное влияние порогового значения регулирования на производительность приложения. В целом, при создании приложения на основе службы, которое использует олицетворение для доступа ко всем почтовым ящикам, помните о следующих ограничениях для учетных записей служб:

  • При использовании олицетворения учетная запись службы получает отдельный бюджет для следующих параметров политики:

    • EWSMaxConcurrency
    • EWSPercentTimeInAD
    • EWSPercentTimeInCAS
    • EWSPercentTimeInMailboxRPC
    • EWSMaxSubscriptions
    • EWSFastSearchTimeoutInSeconds
    • EWSFindCountLimit
  • Бюджет EWSMaxConcurrency делится между учетной записью службы и олицетворяемой учетной записью для всех подключений к версиям Exchange, предшествующим Exchange 2010 с пакетом обновления 2 (SP2) и накопительным пакетом обновления 4 (RU4). Начиная с Exchange 2010 г. SP2 RU4 и включая Exchange Online, бюджет для доступа учетной записи службы отделен от бюджета пользователя EWSMaxConcurrency. Дополнительные сведения об обновлении политики регулирования для одновременных подключений к Exchange для EWS см. в Описании накопительного пакета обновления 4 для Exchange Server 2010 с пакетом обновления 2.

    Для потоковых уведомлений EWS в версиях Exchange начиная с Exchange 2010, включая Exchange Online, используется дополнительный бюджет EWSMaxConcurrency, клонированный из всех других клиентских подключений EWS. Подключения потокового уведомления учитываются в бюджете отдельно от всех других операций EWS. Бюджет максимального количества одновременных подключений потокового уведомления фактически представляет собой два разных бюджета: один для всех учетных записей службы и другой — для олицетворяемой учетной записи. Для потоковых уведомлений в Exchange Online и версий Exchange начиная с Exchange 2013 для ограничения количества подключений используется HangingConnectionLimit.

    Предположим, например, что EWSMaxConcurrency равно пяти. У пользователя может быть пять открытых подключений push-уведомления, тогда как у учетной записи службы может быть пять одновременных подключений push-уведомления к почтовому ящику пользователя одновременно с самим пользователем.

  • В следующей таблице показано, как распределяются бюджеты регулирования EWSMaxSubscriptions между учетной записью службы и учетной записью олицетворения.

    Таблица 2. Расчет бюджета EWSMaxSubscriptions

    Версия Exchange Расчет бюджета регулирования EWSMaxSubscriptions
    Exchange Online Засчитывается для целевого почтового ящика.
    Exchange 2013 Засчитывается для целевого почтового ящика.
    Exchange 2010 SP3 Засчитывается для целевого почтового ящика.
    Exchange 2010 с пакетом обновления 2 (SP2) Засчитывается для вызывающей учетной записи. Начиная с Exchange 2010 SP2 RU4 бюджет засчитывается для целевого почтового ящика.
    Exchange 2010 с пакетом обновления 1 (SP1) Засчитывается для вызывающей учетной записи.
    Exchange 2010 Засчитывается для вызывающей учетной записи.
  • Поскольку бюджет регулирования EWSMaxSubscriptions засчитывается для олицетворяемой учетной записи, количество почтовых ящиков, на которые учетная запись службы может подписаться и получать потоковые уведомления, не ограничивается, пока используется олицетворение. Олицетворяемая учетная запись не может иметь более n одновременных запросов к целевому почтовому ящику, где n — это значение EWSMaxSubscriptions. Если олицетворение не использовалось, всего у одной учетной записи службы может быть не более n одновременных запросов. Таким образом, при использовании олицетворения в учетной записи службы экспоненциально увеличивается число почтовых ящиков, которые можно обслужить. Дополнительные сведения см. в статье Поддержание сходства между группой подписок и сервером почтовых ящиков в Exchange.

  • Параметры политики EWSPercentTimeInMailboxRPC, EWSPercentTimeInCAS и EWSPercentTimeInAD относятся к действиям, выполняемым одним потоком. Когда приложение выполняет несколько параллельных операций, необходимо учитывать совокупное влияние этих операций на бюджет ресурсов пользователя.

Последствия регулирования для пакетных запросов EWS

EWS позволяет объединять несколько отдельных запросов в один пакетный запрос, который выполняется сервером клиентского доступа. Это способствует повышению эффективности и производительности. Когда сервер Exchange выполняет пакетный запрос, он проверяет бюджет пользователя после выполнения каждого элемента в пакете. Если приложение превысило бюджет, обработка следующего элемента пакета откладывается, пока бюджет для этого пользователя не будет пополнен. Чтобы приложения, которые используют пакетные операции, успешно выполнялись, ограничивайте количество отдельных запросов, которые можно включить в один пакет, и разделяйте большие пакеты на несколько меньших пакетов, чтобы повысить надежность результатов. Влияние пакетной операции на конкретные пороговые значения регулирования зависит от типа запроса, размера обрабатываемых элементов (например, в операциях UploadItems или ExportItems) и содержимого почтовых ящиков. Политики регулирования влияют на пакетные операции, в результате чего обработка запроса занимает больше времени. Поэтому вызывающей учетной записи придется дольше ждать ответа, и, поскольку EWS ограничивает время выполнения пакетного запроса одной минутой, время может быть исчерпано.

Чтобы определить оптимальный размер пакета для приложения, проведите модульное тестирование с различными наборами входных данных, чтобы в рабочей среде в приложении не происходили ошибки.

Параметры политики регулирования, влияющие на операции поиска EWS

Для операций поиска в EWS может потребоваться много времени и ресурсов в зависимости от того, как запускается поиск и какие сведения запрашиваются. Для контроля использования ресурсов во время поиска служат два параметра политики: EWSFastSearchTimeoutInSeconds и EWSFindCountLimit.

Параметр политики EWSFastSearchTimeoutInSeconds задает время в секундах, отведенное на быстрый поиск EWS (также называемый поиском с индексированием контента). Быстрый поиск выполняется с помощью строки запроса в расширенном синтаксисе запросов (AQS) в рамках операции FindItem.

Для поиска в папке почтового ящика Exchange можно использовать два способа:

  • Функция поиска в хранилище Exchange, которая выполняет последовательное сканирование всех сообщений в области поиска.

  • Служба поиска Exchange (с индексацией контента).

Оба этих способа могут привести к исчерпанию выделенного времени. По возможности используйте службу поиска Exchange, так как эти операции поиска часто нацелены на индексы почтовых ящиков и используют запросы AQS. В следующем примере показано, как провести поиск AQS в почтовом ящике с помощью EWS и службы поиска Exchange.

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

Если вы не можете использовать поиск AQS, старайтесь не применять чрезмерно сложные фильтры поиска. Также старайтесь не создавать фильтры поиска на основе вычисляемых значений, если запрос включает расширенные свойства MAPI. Поиск AQS появился в Exchange 2010.

Примечание.

При первом запуске сложного запроса на поиск в хранилище Exchange он выполняется очень медленно, с возможным исчерпанием отведенного времени. При последующих запусках он будет выполняться быстрее. Дополнительные сведения о внутренних процессах Exchange Server, происходящих при выполнении запросов на поиск в хранилище Exchange, см. в статье Влияние большого количества элементов и ограниченных представлений на производительность на сайте TechNet. При использовании SearchFilter создается динамическое ограничение, которое помогает выполнению подобных запросов в будущем, но так как эти ограничения динамические по своему характеру, они не являются постоянными или надежными и удаляются не более чем через три дня.

Параметр политики EWSFindCountLimit указывает максимальное количество элементов из результатов операции FindItem или FindFolder, которые могут одновременно размещаться в памяти на сервере клиентского доступа для одного пользователя. Каждый элемент или папка, которые EWS обрабатывает в запросе FindItem или FindFolder, засчитываются в бюджете, указанном в элементе EWSFindCountLimit. Когда отклик отправляется инициатору запроса, количество найденных результатов для текущего вызова обнуляется. Отклик, который сервер возвращает инициатору при превышении бюджета, зависит от значения элемента RequestServerVersion и от того, задал ли инициатор разбиение на страницы. Если значение элемента RequestServerVersion указывает на Exchange 2010 или более раннюю версию Exchange, сервер отправляет сообщение о сбое с кодом ошибки ErrorServerBusy. Если значение элемента RequestServerVersion указывает на версию Exchange начиная с Exchange 2010 SP1 или Exchange Online, а клиент использует разбиение на страницы, EWS может возвратить частичный набор результатов вместо сообщения об ошибке. Приложение должно учитывать, что EWS может возвратить не все элементы. Если значение элемента IncludesLastItemInRange — false, приложение должно сделать другой запрос FindItem или FindFolder с новым смещением и продолжать до тех пор, пока элемент IncludesLastItemInRange не возвратит значение true.

При использовании операции FindItem или FindFolder важно использовать разбиение на страницы. Управляемый интерфейс API EWS обеспечивает использование разбиение на страницы, но если используются другие методы, такие как прокси-объекты EWS или необработанные SOAP-объекты, необходимо задать разбиение на страницы явно. В следующем примере показано, как использовать разбиение на страницы в управляемом интерфейсе API EWS.

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

Примечание.

Политика по умолчанию в Exchange ограничивает размер страницы 1000 элементами. Если задать размер страницы больше этого числа, это не даст практического эффекта.

Приложения также должны учитывать, что при определенном значении параметра регулирования EWSFindCountLimit в случае одновременных запросов возможен возврат неполного набора результатов. В следующем примере показано, как с помощью свойства MoreAvailable в управляемом интерфейсе API EWS обеспечить включение всех результатов в отклик.

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

Политики регулирования и параллелизм

Параллелизм обозначает количество подключений от конкретного пользователя. Подключение удерживается с момента получения запроса и до отправки отклика инициатору запроса. Если пользователь пытается одновременно сделать больше запросов, чем допускает политика, то попытка нового подключения завершается сбоем. Однако существующие соединения остаются действительными. Политики регулирования могут влиять на параллелизм различными путями.

Параметр политики регулирования EWSMaxConcurrency задает количество параллельных подключений к серверу Exchange Server, которые одновременно могут быть у конкретного пользователя. Для определения максимального количества подключений, которые следует разрешить, рассмотрите подключения, используемые клиентами Outlook. Outlook 2007 и Outlook 2010 используют EWS для получения сведений о доступности и отсутствии на месте. Mac Outlook 2011 использует EWS для всех функций клиентского доступа. В зависимости от количества клиентов Outlook, активно подключающихся к почтовому ящику пользователя, количество одновременных подключений, доступных для пользователя, может быть ограничено. Кроме того, если вашему приложению необходимо одновременно подключаться к нескольким почтовым ящикам, используя один контекст безопасности, важно учитывать значение политики EWSMaxConcurrency. Дополнительные сведения об использовании одного контекста безопасности с одновременными подключениями см. в предыдущем разделе Рекомендации по учету регулирования для приложений, использующих олицетворение EWS этой статьи.

Приложения, которые одновременно подключаются к нескольким почтовым ящикам, должны иметь возможность отслеживать использование ресурсов на стороне клиента. Поскольку операции EWS базируются на запросах и откликах, обеспечить надежное функционирование приложений в пределах порога EWSMaxConcurrency можно путем отслеживания количества подключений, возникающих с начала запроса до получения отклика, и поддержания не более десяти одновременно открытых запросов.

Параметр политики EWSFindCountLimit указывает максимальный размер результата, который операция FindItem или FindFolder может использовать на сервере клиентского доступа одновременно для одного пользователя. Если приложение (или потенциально несколько приложений) делает два одновременных запроса EWS FindItem, которые возвращают по 100 элементов каждый для определенного пользователя, то расход бюджета EWSFindCountLimit этого конкретного пользователя составит 200. Когда возвращается отклик на первый запрос, остаток в бюджете снижается до 100, а когда возвращается второй отклик, остаток падает до нуля. Если одно и то же приложение должно было сделать два одновременных запроса на 1000 элементов, то расход бюджета будет 2000 элементов, что превышает значение EWSFindCountLimit. Если остаток бюджета пользователя опускается ниже нуля, следующий запрос приводит к ошибке, пока бюджет пользователя не будет пополнен.

Рекомендации по регулированию для приложений с уведомлениями EWS

При разработке приложений с уведомлениями EWS, использующих push-уведомления, уведомления по запросу или потоковые уведомления, следует учитывать влияние политик регулирования EWSMaxSubscriptions и EWSMaxConconcurrency, а также hangingConnectionLimit.

Параметр политики EWSMaxSubscriptions указывает максимальное количество одновременных активных подписок push-подписок, подписок по запросу и потоковых подписок, которое может быть у пользователя на определенном сервере клиентского доступа. В различных версиях Exchange приняты различные значения по умолчанию для этого параметра. Пользователь может подписаться на все папки в почтовом ящике с помощью свойства SubscribeToAllFolders — при этом в бюджете EWSMaxSubscriptions засчитывается одна подписка. Пользователи могут подписываться на отдельные папки, причем каждая папка засчитывается в бюджете EWSMaxSubscriptions вплоть до ограничения, заданного параметром EWSMaxSubscriptions (например, пользователи могут подписаться на 20 папок календаря в разных почтовых ящиках, если EWSMaxSubscriptions равняется 20).

Сведения об олицетворении и параметре EWSMaxSubscriptions см. в предыдущем разделе Рекомендации по учету регулирования для приложений, использующих олицетворение EWS этой статьи.

Параметр политики EWSMaxConcurrency также может создать проблему для уведомлений EWS; например:

  • Когда EWS увеличивает количество подключений для владельца подписки, в то время как уведомление создается push-подпиской.

  • Когда приложение предназначено для прослушивания почтовых ящиков нескольких пользователей, а пользователи получают одновременные уведомления об экземпляре сообщения, отправленного в список рассылки.

Если приложение с уведомлениями многопоточное и делает одновременные запросы на подключение для получения сведений о конкретном сообщении, принятом учетной записью пользователя, возможно превышение ограничения политики EWSMaxConcurrency. Чтобы учесть это, попробуйте реализовать мониторинг одновременных подключений в приложении, в том числе тех, которые могут использоваться сервером, и организовать очереди запросов в клиенте.

Параметр HangingConnectionLimit применим только к потоковым уведомлениям. Это ограничение устанавливается в файле web.config, то есть администратор Exchange может установить это значение на локальном сервере Exchange Server, однако почтовые ящики Exchange Online должны использовать значение по умолчанию для этого ограничения, которое составляет 10 для Exchange Online, Exchange 2019, Exchange 2016 и 3 для Exchange 2013. Дополнительные сведения см. в статье Какие значения регулирования надо учитывать?.

Политика регулирования и производительность приложений

Следующие три параметра политики регулирования PercentTimeIn влияют на время, которое приложение EWS может затрачивать на сервере клиентского доступа:

  • EWSPercentTimeInAD
  • EWSPercentTimeInCAS
  • EWSPercentTimeInMailboxRPC

Значения, указанные в параметрах политики PercentTimeIn, определяет время, выделяемое одному потоку, чтобы сделать один запрос. Допустим, например, что значение EWSPercentTimeInCAS составляет 90, и если один процесс включает в себя два одновременных запроса, каждый из которых имеет 54 секунды на выполнение кода сервера клиентского доступа, этот процесс использует 108 секунд в 60-секундном окне. Это соответствует значению параметра EWSPercentTimeInCAS 180 процентов.

Примечание.

Значение параметра EWSPercentTimeInCAS представляет собой объединение значений EWSPercentTimeInAD и EWSPercentTimeInMailboxRPC. Это значит, что расход времени на обработку сервера клиентского доступа всегда будет превышать расход времени в EWSPercentTimeInAD и EWSPercentTimeInMailboxRPC. Это происходит потому, что для выполнения компонентом Exchange вызова Active Directory или RPC в нем уже должен выполняться код сервера клиентского доступа. Кроме того, расход времени на обработку для EWSPercentTimeInCAS не прекратится до выполнения вызовов LDAP или RPC. Хотя в запросе может происходить синхронное ожидание отклика от доменных служб Active Directory (AD DS) или хранилища Exchange, этот процесс потребляет поток на сервере, и поэтому поток продолжает расходовать время.

Количество времени ЦП, которое может занять приложение в 60-секундный период, может превышать эти ограничения регулирования; поэтому важно учитывать объем и тип возможных запросов. Например, большой пакет операций ResolveNames, которые выполняются одновременно, может вызвать превышение значения параметра политики EWSPercentTimeInAD. Значения политики, содержащиеся в политике регулирования по умолчанию, рассчитаны на то, чтобы большинство приложений EWS функционировало без проблем; однако, когда интенсивно работающие многопоточные приложения делают больший объем запросов на одном конкретном сервере клиентского доступа, возможны проблемы. Чтобы избежать этого, рекомендуется ограничить размер пакетов, которые будут выполняться на сервере.

Политики регулирования и приложения, которые отправляют большой объем электронной почты

Политики регулирования по умолчанию включают три параметра политики ограничения темпа, которые могут повлиять на приложения, использующие EWS для отправки большого объема сообщений или отправки сообщений большими пакетами в течение короткого периода времени.

Примечание.

В целом, рекомендуется не использовать EWS для массовой отправки электронной почты. Для отправки частых массовых сообщений электронной почты используйте узел SMTP, специально предназначенный для служб массовой рассылки.

Параметр политики MessageRateLimit указывает количество сообщений в минуту, которые могут быть отправлены любым клиентом Exchange, включая EWS. По умолчанию эта политика разрешает 30 сообщений в минуту в Exchange Online (в Exchange Server ограничения нет). Для обычных пользователей в Exchange Online, как правило, этого ограничения достаточно. Однако приложения, которые отправляют большие пакеты сообщений электронной почты, например, для выставления счетов, могут столкнуться с проблемами. При превышении этого ограничения политики доставка сообщений для почтового ящика задерживается. В частности, сообщения будут отображаться в папке "Исходящие" или "Черновики" более долгое время, когда пользователь или приложение будут отправлять больше сообщений, чем указанно параметром MessageRateLimit. Обязательно обдумайте это при разработке системы отслеживания доставки, особенно если в вашем приложении используется почтовый ящик, к которому пользователи подключаются через Outlook. Если отложенные элементы хранятся в папке "Исходящие" или "Черновики", пользователи могут интерпретировать это как ошибку.

Параметр политики RecipientRateLimit указывает ограничения для числа получателей, которым пользователь может адресовать сообщения в течение 24 часов. Например, если этот параметр равен 500, это означает, что одна учетная запись почтового ящика Exchange может отправлять сообщения не более чем 500 получателям каждый день. Это ограничение применяется к сообщениям для получателей как внутри, так и за пределами организации. Это ограничение по умолчанию может привести к проблемам в некоторых бизнес-приложениях, которые выписывают счета в конце каждого месяца и должны отправлять сообщения превосходящему количеству получателей. Для обхода этого ограничения можно использовать внешние службы, позволяющие пакетную обработку сообщений, или отдельные локальные решения исходящей ретрансляции.

Параметр политики ForwardeeLimit указывает максимальное число получателей, которым сообщения могут быть пересланы или перенаправлены с помощью правил папки "Входящие". Этот параметр не ограничивает число сообщений, которое можно пересылать или перенаправлять получателям.

Ошибки, возникающие при превышении ограничений регулирования

При превышении политик регулирования EWS создает одну из ошибок, перечисленных в следующей таблице.

Таблица 3. Ошибки ограничения регулирования

Ошибка Параметр политики регулирования Описание
ErrorExceededConnectionCount EWSMaxConcurrency Указывает, что одновременно сделано больше запросов на сервер, чем разрешается политикой пользователя.
ErrorExceededSubscriptionCount EWSMaxSubscriptions Указывает на превышение максимального количества подписок, установленного политикой регулирования пользователя.
ErrorExceededFindCountLimit EWSFindCountLimit Указывает, что при вызове операции поиска превышено общее количество возвращаемых элементов.
ErrorServerBusy EWSPercentTimeInMailboxRPC
EWSPercentTimeInCAS
EWSPercentTimeInAD
Происходит, когда сервер занят. Значение BackOffMilliseconds, возвращаемое вместе с ошибками ErrorServerBusy, показывает клиенту время, которое он должен подождать перед повторной отправкой запроса, вызвавшего этот код ошибки.

В следующей таблице перечислены коды состояния HTTP, возвращаемые ошибками регулирования.

Таблица 4. Коды состояния HTTP, возвращаемые ошибками регулирования

Код состояния HTTP Описание
HTTP 503 Указывает, что запросы EWS стоят в очереди IIS. Клиент должен отложить отправку новых запросов до более позднего времени.
HTTP 500 Указывает на внутреннюю ошибку сервера с кодом ошибки ErrorServerBusy. Это означает, что клиент должен отложить отправку новых запросов до более позднего времени. Ответ может содержать подсказку о переключении под названием BackOffMilliseconds. Значение BackOffMilliseconds, если оно присутствует, следует использовать как время ожидания до повторной отправки запроса клиентом.
HTTP 200 Содержит ответ об ошибке на основе схемы EWS с кодом ошибки ErrorInternalServerError. Может присутствовать внутренний код ошибки ErrorServerBusy. Это означает, что клиент должен отложить отправку новых запросов до более позднего времени.

См. также