在客户端中检测 EWS 和 REST 的Exchange

了解 EWS 中的 HTTP 标头和 REST 请求和响应,这些请求和响应可帮助您监视您的 Exchange 应用程序。

你是否曾经这样过? 应用程序的用户报告意外错误。 你想要调查,但无法重现它。 用户的错误已消失,你只留下非常少的可操作数据。 很麻烦,不是吗? 让我们看一下如何主动准备此方案,并希望在将来避免受挫。

向请求添加检测

建议向请求添加其他 HTTP 标头,以方便进行故障排除。 您应将此信息的记录保留 (例如,在 日志文件) 中,以便以后可以在需要时进行检索。 这在检查网络流量时很有用,并且如果你联系 Microsoft 支持人员寻求帮助,这也会很有帮助。

表 1.疑难解答的请求标头

EWS (HTTP 标头) EWS 托管 API 等效项 注意
User-Agent
ExchangeService.UserAgent
将此值设置为标识客户端应用程序的唯一值。

如果对应用程序发送的所有请求使用相同的值,Microsoft 可帮助解决呼叫失败问题(如果发生)。
client-request-id
ExchangeService.ClientRequestId
对于应用程序发送的每一个请求,将其设置为不同的唯一值。

建议使用 GUID。 此唯一标识符用于在出现问题时关联两个系统之间的活动。
return-client-request-id
ExchangeService.ReturnClientRequestId
将此值 设置为 true 以向 Exchange 服务器发出信号,指示它应在相应响应中返回客户端请求 id 的值。

您可以使用它关联网络跟踪或 EWS 托管 API 跟踪中的请求和响应。
X-ClientStatistics
ExchangeService.SendClientLatencies
用于向 Microsoft 报告EWS延迟(如果应用程序正在访问 Exchange Online 或 Exchange Online 作为 Office 365 的一Office 365。

记录来自响应的信息

正如客户端可以向它发送的请求添加其他检测一样,Exchange以 HTTP 标头的形式向响应添加其他检测。 客户端应捕获此信息,以与请求检测信息一起提供。

备注

如果使用 EWS 托管 API,则 HTTP 标头没有直接等效项。 但是,可以通过 ExchangeService.HttpResponseHeaders 属性访问所有 HTTP 响应头。

表 2.HTTP 响应标头

HTTP 标头 说明
request-id
对应于此响应的请求的服务器生成的 ID。
client-request-id
请求中的 client-request-id 标头的值。

只有当请求包含值为 true 的 return-client-request-id 标头时,此标头才 存在
X-FEServer
处理请求的客户端访问服务器的 FQDN。
X-TargetBEServer
处理请求的邮箱服务器的 FQDN。
X-DiagInfo
其他诊断信息,具体取决于请求。
x-ms-diagnostics
此标头仅在请求中使用的 OAuth 身份验证时适用。

它包含一个显式错误代码,用于指定 OAuth 身份验证失败的原因。

它采用以下格式: errorId;reason="reason"error_type="error type"

原因 字段是可读的错误描述。

errorId 字段是一个整数,错误 类型 _ 字段是 该整数的字符串表示形式,如下所示:
  • 2000000:签名 _ 无效
  • 2000001:令牌 _ 无效
  • 2000002: _ 令牌已过期
  • 2000003:资源 _ 无效
  • 2000004:租户 _ 无效
  • 2000005:用户 _ 无效
  • 2000006:客户端 _ 无效
  • 2000007:内部 _ 错误
  • 2000008:授予 _ 无效

向 Microsoft 报告 EWS 延迟

如果您的应用程序使用 EWS 托管 API 或 EWS 连接到 Exchange Online,您可以直接向 Microsoft 报告 EWS 请求中的延迟。 信息通过 X-ClientStatistics 请求标头传递。 如果使用的是 EWS 托管 API,则只要将 ExchangeService.SendClientLatencies属性设置为 true。 如果使用的是 EWS,则需要测量发出请求和接收响应之间的时间,然后采用以下格式将 X-ClientStatistics 标头添加到应用程序发送的下一个 EWS 请求中。

X-ClientStatistics: MessageId=<value of request-id header>,ResponseTime=<time in milliseconds>,SoapAction=<EWS operation>

我们维护有关这些延迟的报告,并使用它们持续改进 Exchange Online。

后续步骤

将客户端检测添加到应用程序后,如果出现问题,可以更好地做好准备。 如果发生这种情况,可以使用检测数据 对应用程序进行疑难解答

另请参阅