共用方式為


檢視訊息記錄

本主題描述如何檢視訊息記錄。

在服務追蹤查看器中檢視訊息記錄

在 WCF 處理過程中,訊息將會被轉換。 因此,所記錄的訊息只會反映訊息記錄時的內容,而不是連線上的內容。

由於訊息記錄的輸出與訊息的傳輸格式沒有任何關聯性,因此訊息記錄一律會輸出已譯碼的訊息。 如果您已正確設定訊息記錄,則任何記錄的訊息都應該是純文本。 例如,記錄訊息的格式(純文本)不會受到二進位訊息編碼器的使用影響。

XmlWriterTraceListener 的輸出是包含 XML 片段序列的檔案。 您應該知道檔案不是有效的 XML 檔案。 建議您使用 服務追蹤查看器工具 (SvcTraceViewer.exe) 來檢視訊息記錄檔。 如需如何使用此工具的詳細資訊,請參閱 使用服務追蹤查看器來檢視相互關聯的追蹤和疑難解答

在 [服務追蹤查看器] 中,訊息會列在 [ 訊息 ] 索引標籤中。根據錯誤的嚴重性,造成或與處理錯誤相關的訊息會以黃色(警告層級)或紅色(錯誤層級)反白顯示。 雙擊訊息會在處理要求的上下文中開啟訊息追蹤。

備註

如果訊息沒有標頭,則不會記錄任何 <header/> 標記。

檢視由客戶端、轉送器和服務所記錄的訊息

您的環境可能包含一個用戶端,該用戶端會將訊息傳送到中繼站,然後中繼站會將訊息轉寄到服務。 當在三個位置上啟用訊息記錄時,並且在服務追蹤查看器工具(SvcTraceViewer.exe)中同時查看所有三個訊息記錄檔,訊息日誌將會被不正確地呈現。 這是因為 CorrelationId 訊息標頭中的 和 ActivityId 對於每個傳送接收組而言並不是唯一的。

您可以使用下列其中一種方法來解決此問題。

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。

另請參閱