TraceSource.TraceTransfer против TraceSource.TraceEvent (TraceEventType.Transfer - PullRequest
2 голосов
/ 11 июня 2010

При использовании System.Diagnostics TraceSource для ведения журнала / трассировки, есть ли разница между использованием TraceSource.TraceTransfer и TraceSource.TraceEvent (TraceEventType.Transfer, ...?

В нашей среде мы будем разрабатывать ряд служб, которые будут взаимодействовать через WCF. Мы также оцениваем, какую платформу мы должны использовать для регистрации / отслеживания. Мы склоняемся к использованию System.Diagnostics, по крайней мере, частично из-за способности коррелировать журналы между сервисами, используя CorrelationManager, ActivityID, TraceTransfer и т. Д.

В документации по TraceSource я вижу, что у него есть метод TraceTransfer, а также TraceEvent, который может принимать TraceEventType.Transfer в качестве типа события. Когда бы вы использовали один против другого? Я видел примеры вроде здесь , которые показывают, как использовать Start / Stop и как управлять ActivityID и CorrelationManager, но я редко видел, чтобы кто-либо использовал TraceSource.TraceEvent (TraceEventType.Transfer, ...). Вот пример здесь , который показывает использование TraceEventType.Transfer (а также явный вызов TraceTransfer).

К этому моменту, возможно, я действительно начинаю отвечать на свой вопрос ...

Похоже, что TraceSource.TraceTransfer явно делает что-то с ActivityID, который передается в качестве параметра, тогда как вызов TraceSource.TraceEvent (TraceEventType.Transfer, ...) явно ничего не делает с ActivityID (поскольку он не передается в качестве параметра). Похоже, что на самом деле это просто запись другого события, которое является событием Transfer, но ничего не делает с CorrelationManager или чем-то еще.

Спасибо за любую помощь.

1 Ответ

2 голосов
/ 08 ноября 2010

Согласно документации MSDN для TraceSource.TraceTransfer , TraceSource.TraceTransfer вызывает TraceListener.TraceTransfer.Базовая реализация TraceListener.TraceTransfer просто вызывает TraceListener.TraceEvent (TraceEventType.Transer, ...), передавая строковое представление guid, переданного в TraceSource.TraceTransfer.

Итак, мне кажется, что TraceSource.TraceTransfer предоставляет способ явно указать, что происходит перенос активности.На сайте вызова более очевидно и более безопасно использовать TraceSource.TraceTransfer.При реализации TraceListener вы можете воспользоваться явным вызовом TraceTransfer и тем фактом, что идентификатор активности передается как Guid, для выполнения любой специальной работы, которую вы хотите выполнять при передаче идентификатора активности.

...