TraceSource.TraceTransfer与TraceSource.TraceEvent(TraceEventType.Transfer

时间:2010-06-11 16:12:49

标签: c# .net wcf logging diagnostics

使用System.Diagnostics TraceSource进行日志记录/跟踪时,使用TraceSource.TraceTransfer和TraceSource.TraceEvent(TraceEventType.Transfer,...?

之间有区别吗

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

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

到目前为止,也许我真的开始回答我自己的问题......

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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

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