Расширение трассировки
В примере ExtendingTracing показано, как расширить функцию трассировки Windows Communication Foundation (WCF), написав определяемые пользователем трассировки действий в коде клиента и службы. Написание определяемых пользователем трассировок действий позволяет пользователю создавать действия трассировки и группировать трассировки в логические единицы работы. Кроме того, возможно согласование действий с помощью передач (в рамках одной конечной точки) и распространения (между конечными точками). В этом образце трассировка включается как для клиента, так и для службы. Дополнительные сведения о включении трассировки в файлах конфигурации клиента и службы см. в разделе "Трассировка и ведение журнала сообщений".
Этот пример основан на начале работы.
Примечание.
Процедура настройки и инструкции по построению для данного образца приведены в конце этого раздела.
Трассировка и распространение действий
Определяемая пользователем трассировка действий позволяет пользователю создавать собственные действия трассировки для группирования трассировок в логические единицы работы, сопоставлять действия с помощью передачи и распространения, а также уменьшать затраты на производительность трассировки WCF (например, затраты на дисковое пространство файла журнала).
Добавление пользовательских источников
Пользовательские трассировки можно добавлять как в код клиента, так и в код службы. Добавление источников трассировки в файлы конфигурации клиента или службы позволяет записывать эти пользовательские трассировки и отображаться в средстве просмотра трассировки службы (SvcTraceViewer.exe). В следующем примере кода показано, как добавить в файл конфигурации пользовательский источник трассировки с именем ServerCalculatorTraceSource
.
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Warning" propagateActivity="true">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="xml">
<filter type="" />
</add>
</listeners>
</source>
<source name="ServerCalculatorTraceSource" switchValue="Information,ActivityTracing">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="xml">
<filter type="" />
</add>
</listeners>
</source>
</sources>
<sharedListeners>
<add initializeData="C:\logs\ServerTraces.svclog" type="System.Diagnostics.XmlWriterTraceListener"
name="xml" traceOutputOptions="Callstack">
<filter type="" />
</add>
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>
....
Сопоставление действий
Для непосредственного согласования действий между конечными точками в источнике трассировки propagateActivity
атрибут true
должен иметь значение System.ServiceModel
. Кроме того, для распространения трассировок без прохождения действий WCF необходимо отключить трассировку действий ServiceModel. Это показано в следующем примере кода.
Примечание.
Отключение трассировки действия ServiceModel не эквивалентно указанию значения off для уровня трассировки, обозначаемого свойством switchValue
.
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Warning" propagateActivity="true">
...
</source>
</sources>
</system.diagnostics>
Снижение затрат на производительность
Установка для свойства ActivityTracing
значения off в трассировке System.ServiceModel
создает файл трассировки, который содержит только пользовательские трассировки действий без включения каких-либо трассировок действий ServiceModel. Исключение трассировок действий ServiceModel приводит к гораздо меньшему файлу журнала. Однако возможность коррелировать трассировки обработки WCF теряется.
Настройка, сборка и запуск примера
Убедитесь, что вы выполнили процедуру однократной установки для примеров Windows Communication Foundation.
Чтобы создать выпуск решения на языке C# или Visual Basic .NET, следуйте инструкциям в разделе Building the Windows Communication Foundation Samples.
Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в разделе "Примеры Windows Communication Foundation".