Ablaufverfolgung von Anforderungen und Antworten zur Problembehandlung von EWS Managed API-Apps

Erfahren Sie, wie Sie EWS-Anforderungen und -Antworten nachverfolgen, um Fehler in Ihrer EWS Managed API-Anwendung zu beheben.

Das Debuggen einer webdienstbasierten Anwendung kann schwierig sein, da ein Teil der Verarbeitung auf einem Remotecomputer ausgeführt wird, auf den Sie möglicherweise keinen Zugriff haben. Da Sie den Code auf dem Server nicht schrittweise durchlaufen können, kann es hilfreich sein, die XML-Anforderungen und -Antworten zu sehen, die zwischen dem Client und dem Server gesendet werden, um zu ermitteln, welcher Teil der Anwendung einen Fehler verursacht.

Wenn Sie EWS verwenden, haben Sie bereits Zugriff auf die XML-Anforderung und -Antwort. Sie können einen Haltepunkt in Ihren Code einfügen, um die Antwort des Servers auf Ihre Anforderung zu überprüfen, um ein Problem zu beheben. Wenn Sie die verwaltete EWS-API verwenden, haben Sie keinen direkten Zugriff auf die EWS-Anforderung und -Antwort. Sie können jedoch Ablaufverfolgungsmethoden für das ExchangeService-Objekt verwenden, um die XML-Anforderung und -Antwort zu erfassen, und Sie können dann den XML-Code verwenden, um zu ermitteln, warum Ihr Code nicht funktioniert.

Wenn Sie z. B. eine Eigenschaft nicht richtig festgelegt haben, erhalten Sie möglicherweise eine unerwartete Antwort, und Sie können die Ablaufverfolgungsausgabe verwenden, um die XML-Anforderung und -Antwort zu untersuchen, um den Fehler zu identifizieren. Die Ablaufverfolgungsausgabe der verwalteten EWS-API kann Ihnen auch helfen, die XML-Anforderung zum Erstellen Ihrer EWS-Anwendung manuell zu erstellen. Wenn Sie EWS verwenden, können Sie eine kleine Anwendung mithilfe der verwalteten EWS-API erstellen, sie nachverfolgen und dann die XML-Anforderungsinformationen verwenden, um Ihre EWS-Anforderung zu erstellen.

Aktivieren der Ablaufverfolgung für das ExchangeService-Objekt

Um die Ablaufverfolgung zu aktivieren, erstellen Sie ein ExchangeService-Objekt für Ihre Anwendung, und legen Sie die Ablaufverfolgungseigenschaften fest, wie im folgenden Beispiel gezeigt.

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;

Nachdem Sie die TraceEnabled-Eigenschaft auf true festgelegt haben, werden alle Anforderungen, die den Ablaufverfolgungsflags entsprechen, an den angegebenen Ablaufverfolgungslistener gesendet. Sie können ein einzelnes Ablaufverfolgungsflag oder mehrere Ablaufverfolgungsflags angeben, indem Sie sie mit einem logischen OR kombinieren. Sie können die TraceFlags-Enumeration verwenden, um Werte für EWS und für AutoErmittlungsanforderungen und -antworten anzugeben.

Implementieren eines TraceListener-Objekts

Sie können die TraceEnabled-Eigenschaft auf true festlegen, um die XML-Anforderungen und -Antworten an Ihre Anwendung auszugeben, z. B. ein Konsolenfenster. Wenn Sie die Ablaufverfolgungsausgabe steuern und in einer Datei speichern möchten, empfiehlt es sich, ein TraceListener-Klassenobjekt zu implementieren. Das folgende Codebeispiel zeigt ein einfaches Objekt, das die ITraceListener-Schnittstelle implementiert und die nachverfolgten Anforderungen und Antworten in XML- oder Textdateien speichert.

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

Siehe auch