EWS マネージ API アプリのトラブルシューティングのために要求と応答をトレースする

EWS マネージ API アプリケーションのエラーをトラブルシューティングするために、EWS 要求と応答をトレースする方法について説明します。

Web サービス ベースのアプリケーションのデバッグは、アクセスできない可能性があるリモート コンピューターで処理の一部が実行されるため、困難な場合があります。 サーバー上ではコードをステップ実行できないため、クライアントとサーバー間で送信される XML 要求と応答を確認すると、アプリケーションのどの部分がエラーの原因なのかを特定しやすくなります。

EWS を使用している場合は、XML 要求と応答に既にアクセスできます。問題のトラブルシューティングを行うために、要求に対するサーバーの応答を確認するブレークポイントをコードに配置できます。 EWS マネージ API を使用している場合、EWS の要求と応答に直接アクセスすることはできません。 ただし、 ExchangeService オブジェクトのトレース メソッドを使用して XML 要求と応答をキャプチャし、XML を使用してコードが動作しない理由を判断できます。

たとえば、プロパティを正しく設定しなかった場合、予期しない応答が返される可能性があり、トレース出力を使用して XML 要求と応答を確認してエラーを特定できます。 EWS マネージ API からのトレース出力は、EWS アプリケーションを作成するための XML 要求を手動でビルドするのにも役立ちます。 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 に設定すると、トレース フラグに一致するすべての要求が、指定したトレース リスナーに送信されます。 1 つのトレース フラグを指定することができ、またはトレース フラグを論理 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);
      }
    }
}

関連項目