メッセージ ログを参照する
ここでは、メッセージ ログの表示方法について説明します。
サービス トレース ビューアーでのメッセージ ログの表示
メッセージは WCF で処理されるときに変換されます。 そのため、ログ記録されたメッセージは、ログ記録された時点でのメッセージの内容を反映しているにすぎず、ネットワーク上での内容ではありません。
メッセージ ログの出力はメッセージの転送形式とは関係がないため、メッセージ ログは常にデコードされたメッセージを出力します。 メッセージ ログが適切に設定されていれば、すべてのログ メッセージはプレーンテキストになります。 たとえば、ログ メッセージの形式 (プレーンテキスト) は、バイナリ メッセージ エンコーダーの使用には影響されません。
XmlWriterTraceListener の出力は、一連の XML フラグメントを含んだファイルです。 このファイルは有効な XML ファイルではないことに注意してください。 サービス トレース ビューアー ツール (SvcTraceViewer.exe) を使用してメッセージ ログ ファイルを表示することをお勧めします。 このツールの使用方法の詳細については、「サービス トレース ビューアーを使用した相関トレースの表示とトラブルシューティング」を参照してください。
サービス トレース ビューアーでは、メッセージは [Message] タブに表示されます。操作エラーの原因となった、または操作エラーに関連するメッセージは、エラーの重大度に応じて、黄色 (警告レベル) または赤色 (エラー レベル) で強調表示されます。 メッセージをダブルクリックすると、要求の処理のコンテキストに従ってメッセージ トレースが表示されます。
Note
メッセージにヘッダーがない場合は、<header/>
タグがログに記録されません。
クライアント、中継、およびサービスによって記録されたメッセージの表示
環境には、クライアント、クライアントからメッセージが送信される中継、中継からさらにメッセージが転送されるサービスが含まれることがあります。 これら 3 つの場所すべてでメッセージのログ記録が有効になっており、3 つのメッセージ ログをすべて同時にサービス トレース ビューアー ツール (SvcTraceViewer.exe) に表示した場合、メッセージ ログ交換は正しく表示されません。 これは、メッセージ ヘッダーの CorrelationId
と ActivityId
が、すべての送受信ペアで一意にならなくなるためです。
この問題を解決するには、次のいずれかの方法に従います。
サービス トレース ビューアー ツール (SvcTraceViewer.exe) では、常に 3 つのメッセージ ログのうち 2 つだけを表示します。
3 つのログすべてをサービス トレース ビューアー ツール (SvcTraceViewer.exe) で同時に表示する必要がある場合は、新規の Message インスタンスを作成して中継サービスを変更できます。 このインスタンスは、受信メッセージの本文のコピーであり、また、
ActivityId
ヘッダーおよびAction
ヘッダーを除くすべてのヘッダーのコピーであることが必要です。 これを実行する方法を次のコード例に示します。
Message outgoingMessage = Message.CreateMessage(incomingMessage.Version, incomingMessage.Headers.Action, incomingMessage.GetReaderAtBodyContents());
for (int i = 0; i < incomingMessage.Headers.Count; i++)
{
if (incomingMessage.Headers[i].Name.Equals("ActivityId", StringComparison.InvariantCultureIgnoreCase) ||
incomingMessage.Headers[i].Name.Equals("Action", StringComparison.InvariantCultureIgnoreCase))
{
continue;
}
outgoingMessage.Headers.CopyHeaderFrom(incomingMessage, i);
}
メッセージ ログ内容が不正確になる例外的なケース
次の条件では、ログ記録されたメッセージがネットワーク上にあるオクテット ストリームの正確な表現とはならない場合があります。
BasicHttpBinding の場合、エンベロープ ヘッダーは /addressing/none 名前空間の受信メッセージについてログ記録されます。
空白に不一致が生じる場合があります。
受信メッセージの場合、空の要素が異なる表現になる場合があります。 たとえば、<tag/> ではなく <tag></tag> になることがあります。
既知の PII ログ記録が、既定または enableLoggingKnownPii="true" という明示的な設定で、無効になっている場合。
UTF-8 へ変換するためのエンコードが有効な場合。