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