本主題描述如何檢視訊息記錄。
在服務追蹤查看器中檢視訊息記錄
在 WCF 處理過程中,訊息將會被轉換。 因此,所記錄的訊息只會反映訊息記錄時的內容,而不是連線上的內容。
由於訊息記錄的輸出與訊息的傳輸格式沒有任何關聯性,因此訊息記錄一律會輸出已譯碼的訊息。 如果您已正確設定訊息記錄,則任何記錄的訊息都應該是純文本。 例如,記錄訊息的格式(純文本)不會受到二進位訊息編碼器的使用影響。
XmlWriterTraceListener 的輸出是包含 XML 片段序列的檔案。 您應該知道檔案不是有效的 XML 檔案。 建議您使用 服務追蹤查看器工具 (SvcTraceViewer.exe) 來檢視訊息記錄檔。 如需如何使用此工具的詳細資訊,請參閱 使用服務追蹤查看器來檢視相互關聯的追蹤和疑難解答。
在 [服務追蹤查看器] 中,訊息會列在 [ 訊息 ] 索引標籤中。根據錯誤的嚴重性,造成或與處理錯誤相關的訊息會以黃色(警告層級)或紅色(錯誤層級)反白顯示。 雙擊訊息會在處理要求的上下文中開啟訊息追蹤。
備註
如果訊息沒有標頭,則不會記錄任何 <header/> 標記。
檢視由客戶端、轉送器和服務所記錄的訊息
您的環境可能包含一個用戶端,該用戶端會將訊息傳送到中繼站,然後中繼站會將訊息轉寄到服務。 當在三個位置上啟用訊息記錄時,並且在服務追蹤查看器工具(SvcTraceViewer.exe)中同時查看所有三個訊息記錄檔,訊息日誌將會被不正確地呈現。 這是因為 CorrelationId 訊息標頭中的 和 ActivityId 對於每個傳送接收組而言並不是唯一的。
您可以使用下列其中一種方法來解決此問題。
隨時只檢視 服務追蹤查看器工具 (SvcTraceViewer.exe) 中三個訊息記錄中的兩個。
如果您必須同時檢視 服務追蹤查看器工具 (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。