查看消息日志

本主题介绍如何查看消息日志。

在服务跟踪查看器中查看消息日志

消息将随着 WCF 的处理而被转换。 因此,正在记录的消息仅反映消息被记录时的内容,而不是传输过程中的内容。

由于消息日志记录的输出与消息的传输格式没有关系,消息日志记录始终输出解码的消息。 如果已正确配置消息日志记录,则任何记录的消息都应为纯文本。 例如,记录的消息的格式(纯文本)不受二进制消息编码器的使用的影响。

XmlWriterTraceListener 的输出是包含 XML 片段序列的文件。 应注意该文件不是有效的 XML 文件。 建议使用 服务跟踪查看器工具(SvcTraceViewer.exe) 查看消息日志文件。 有关如何使用此工具的详细信息,请参阅 使用服务跟踪查看器查看相关跟踪和故障排除

在服务跟踪查看器中,消息列在 “消息 ”选项卡中。导致或与处理错误相关的消息会根据错误的严重性在黄色(警告级别)或红色(错误级别)中突出显示。 双击消息会显示处理请求上下文中的消息跟踪。

注释

如果消息没有标头,则不会记录 <header/> 标记。

查看客户端、中继和服务记录的消息

你的环境可能包含一个客户端,该客户端会将消息发送到中继,该中继随后将消息转发到服务。 在所有三个位置启用消息日志记录,同时在 服务跟踪查看器工具(SvcTraceViewer.exe) 中查看所有三个消息日志时,消息日志交换将错误呈现。 这是因为在消息标头中的CorrelationIdActivityId对于每个发送/接收对不是唯一的。

可以使用以下任一方法来解决此问题。

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/>

  • 默认情况下或通过显式设置 enableLoggingKnownPii="true" 已禁用已知 PII 日志记录。

  • 启用编码以转换为 UTF-8。

另请参阅