在 Exchange 中使用 EWS 时处理通知相关的错误

了解如何在 Exchange 中使用 EWS 托管 API 或 EWS 开发的应用程序中处理与通知相关的错误。

如果应用程序订阅并收到通知,则可能必须处理与通知相关的错误。 您可以处理这些错误在运行时,或者开发 EWS 应用程序时。

表 1. 与通知相关的错误及其处理方式

Error 尝试... 处理它的...
ErrorExceededConnectionCount 打开连接以在帐户达到其打开的流式处理连接的连接限制时获取事件。
  • 使用模拟打开连接
  • 使用更少的连接来获取事件。 通过使用相关性并在同一组中放置最多 200 个订阅 ID,最大化每个连接中的订阅数。 然后,可以使用同一连接来检索整个组的事件,从而减少所需的连接数。
  • 更改本地 Exchange web.config 文件中的 HangingConnectionLimit 的值,以覆盖三个打开的连接的默认值。 Exchange Online的默认 HangingConnectionLimit 为 10,这是不可配置的。
ErrorExceededSubscriptionCount 创建过多的订阅。 EwsMaxSubscriptions 限制策略参数确定帐户可以创建的最大订阅数。
ErrorInvalidSubscriptionRequest 从单个请求为多个邮箱或多个文件夹创建订阅。 在单个请求中为单个公用文件夹或单个邮箱创建订阅。
ErrorInvalidWatermark 使用无效水印获取事件。
  • 检查在以前的响应中返回的订阅 ID。
  • 确保发送正确的 ExchangeService 对象的订阅 ID。
  • 创建新订阅
ErrorMissedNotificationEvents 在错过某些以前的事件时获取事件。 比较扩展文件夹属性 PR_LOCAL_COMMIT_TIME_MAX (0x670a) PR_DELETED_COUNT_TOTAL (0x670b) 以确定错过了哪些更改,并 创建新订阅
ErrorProxyRequestNotAllowed 订阅邮箱已移到另一个站点的批处理请求中的用户的事件。 使用 自动发现 重新发现 ExternalEwsUrl 或 EwsPartnerUrl,并创建新订阅。
ErrorReadEventsFailed 从找不到的订阅获取事件。 使用 自动发现 重新发现 ExternalEwsUrl 或 EwsPartnerUrl,并创建新订阅。
ErrorServerBusy 超出 限制 。 请注意有关限制的以下事项:
  • EwsMaxSubscriptions 限制标识一次可以处于活动状态的推送、拉取或流式处理通知订阅的最大数量。 这是邮箱订阅的值,而不是邮箱订阅中的单个文件夹订阅数。 从服务邮箱版本 14.16.0135 和 14.15.0057.000 开始,由 Exchange Online 或 Exchange Online 作为Office 365一部分托管的邮箱最多可以有 20 个订阅,目标 Exchange 2013 本地邮箱最多可以有 5000 个订阅。
  • EwsMaxConcurrency 限制标识非流式处理连接的活动请求的最大数目,默认值为 27。
  • 打开的流式处理连接的默认限制为 10。
  • 考虑与通知相关的限制策略的影响 ,并限制活动订阅和活动连接的数量,以便应用程序不受限制。
  • 使用更少的连接来获取事件。 通过将 最多 200 个订阅 ID 放置在同一组中来最大化每个连接中的订阅数。 然后,可以使用同一连接来检索整个组的事件,从而减少所需的连接数。
  • 更改 web.config 文件中 HangingConnectionLimit 的值,以覆盖 10 个打开的流式处理连接的默认值。
ErrorSubscriptionNotFound 获取找不到的订阅的事件。 订阅可能已过期、EWS 进程可能已重启,或者传入了无效订阅。
  • 验证是否使用了上一响应中返回的同一订阅 ID。
  • 确保发送正确的 ExchangeService 对象的订阅 ID。
  • 创建新订阅
ServiceLocalException 在另一个文件夹上打开订阅连接时,将订阅添加到新文件夹。 将订阅更改为订阅邮箱中的所有文件夹,而不是特定文件夹。
ServiceResponseException 获取无法在 Exchange 存储中查找的订阅的事件。
  • 验证是否使用了上一响应中返回的同一订阅 ID。
  • 确保发送正确的 ExchangeService 对象的订阅 ID。

从丢失的订阅中恢复

当订阅丢失或不再可访问时,最好创建新订阅,并且不要在新订阅中包含旧水印。 使用旧水印重新订阅会导致对事件进行线性扫描,这代价高昂。 请改为创建新的订阅并比较文件夹属性,以查找丢失的订阅和新订阅之间发生的内容更改。 建议检查的扩展文件夹属性 PR_LOCAL_COMMIT_TIME_MAX (0x670a0040) PR_DELETED_COUNT_TOTAL (0x670b0003) 。 可以通过 创建扩展属性定义来执行此操作。

另请参阅