C# TraceSource.TraceTransfer与TraceSource.TraceEvent(TraceEventType.Transfer

C# TraceSource.TraceTransfer与TraceSource.TraceEvent(TraceEventType.Transfer,c#,.net,wcf,logging,diagnostics,C#,.net,Wcf,Logging,Diagnostics,使用System.Diagnostics TraceSource进行日志记录/跟踪时,使用TraceSource.TraceTransfer和TraceSource.TraceEvent(TraceEventType.Transfer,…)之间是否存在差异 在我们的环境中,我们将开发大量通过WCF进行通信的服务。我们还将评估应该使用什么平台进行日志记录/跟踪。我们倾向于使用System.Diagnostics,至少部分原因是使用CorrelationManager、ActivityID、Trac

使用System.Diagnostics TraceSource进行日志记录/跟踪时,使用TraceSource.TraceTransfer和TraceSource.TraceEvent(TraceEventType.Transfer,…)之间是否存在差异

在我们的环境中,我们将开发大量通过WCF进行通信的服务。我们还将评估应该使用什么平台进行日志记录/跟踪。我们倾向于使用System.Diagnostics,至少部分原因是使用CorrelationManager、ActivityID、TraceTransfe在服务之间关联日志的能力r等

我可以在TraceSource的文档中看到,它有一个TraceTransfer方法和一个TraceEvent,可以将TraceEventType.Transfer作为事件类型。您什么时候会使用一个或另一个?我看到过这样的示例说明如何使用Start/Stop以及如何管理ActivityID和CorrelationManager,但我很少见到任何人使用TraceSource.TraceEvent(TraceEventType.Transfer,…)。有一个示例显示如何使用TraceEventType.Transfer(以及显式调用TraceTransfer)

至此,也许我真的开始回答我自己的问题了

似乎TraceSource.TraceTransfer正在显式地使用作为参数传递的ActivityID执行某些操作,而调用TraceSource.TraceEvent(TraceEventType.Transfer,…)并没有显式地使用ActivityID执行任何操作(因为它没有作为参数传递)。看起来它实际上只是记录了另一个事件,这恰好是一个传输事件,但没有使用CorrelationManager或其他任何功能

谢谢您的帮助。

根据,TraceSource.TraceTransfer调用TraceListener.TraceTransfer。TraceListener.TraceTransfer的基本实现只需调用TraceListener.TraceEvent(TraceEventType.Transer,…),传递给TraceSource.TraceTransfer的guid的字符串表示形式

因此,在我看来,TraceSource.TraceTransfer提供了显式指示正在发生活动转移的方法。在调用站点,使用TraceSource.TraceTransfer更明显,类型更安全。如果实现TraceListener,您可以利用显式TraceTransfer调用和活动id为作为Guid传入,以便在传输活动id时执行您想要执行的任何特殊工作