跟踪请求和响应以排查 EWS 托管 API 应用问题
了解如何跟踪 EWS 请求和响应,以排查 EWS 托管 API 应用程序中的错误。
调试基于 Web 服务的应用程序可能很困难,因为部分处理是在你可能无权访问的远程计算机上执行的。 由于无法单步执行服务器上的代码,因此查看在客户端和服务器之间发送的 XML 请求和响应,以确定应用程序的哪个部分导致了错误。
如果使用 EWS,则你已有权访问 XML 请求和响应;可以在代码中放置一个断点,以查看服务器对请求的响应,以便对问题进行故障排除。 如果使用 EWS 托管 API,则无法直接访问 EWS 请求和响应。 但是,可以在 ExchangeService 对象上使用跟踪方法来捕获 XML 请求和响应,然后可以使用 XML 来确定代码不起作用的原因。
例如,如果未正确设置属性,则可能会收到意外响应,并且可以使用跟踪输出查看 XML 请求和响应来识别错误。 EWS 托管 API 的跟踪输出还有助于手动生成 XML 请求以创建 EWS 应用程序。 如果使用 EWS,则可以使用 EWS 托管 API 创建小型应用程序,对其进行跟踪,然后使用 XML 请求信息来帮助生成 EWS 请求。
在 ExchangeService 对象上启用跟踪
若要启用跟踪,请为应用程序创建 一个 ExchangeService 对象,并设置跟踪属性,如以下示例所示。
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
service.TraceListener = ITraceListenerInstance;
// Optional flags to indicate the requests and responses to trace.
service.TraceFlags = TraceFlags.EwsRequest | TraceFlags.EwsResponse
service.TraceEnabled = true;
将 TraceEnabled 属性设置为 true 后,与跟踪标志匹配的所有请求都将发送到指定的跟踪侦听器。 可以指定单个跟踪标志,也可以通过将跟踪标志与逻辑 OR 组合来指定多个跟踪标志。 可以使用 TraceFlags 枚举 为 EWS 以及自动发现请求和响应指定值。
实现 TraceListener 对象
可以将 TraceEnabled 属性设置为 true 以将 XML 请求和响应输出到应用程序,例如控制台窗口。 如果要控制跟踪输出并将其保存到文件,建议实现 TraceListener 类 对象。 下面的代码示例演示了一个实现 ITraceListener 接口并将跟踪的请求和响应存储在 XML 或文本文件中的简单对象。
class TraceListener : ITraceListener
{
#region ITraceListener Members
public void Trace(string traceType, string traceMessage)
{
CreateXMLTextFile(traceType, traceMessage.ToString());
}
#endregion
private void CreateXMLTextFile(string fileName, string traceContent)
{
// Create a new XML file for the trace information.
try
{
// If the trace data is valid XML, create an XmlDocument object and save.
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(traceContent);
xmlDoc.Save(fileName + ".xml");
}
catch
{
// If the trace data is not valid XML, save it as a text document.
System.IO.File.WriteAllText(fileName + ".txt", traceContent);
}
}
}