Introduction
Tracing mechanism in Windows Communication Foundation is based on the classes that reside in System.Diagnostic
namespace. Important classes are Trace
, TraceSource
and TraceListener
.
Following are the steps to enable tracing in WCF:
- Configuring WCF to emit tracing information/Define Trace Source, we have the following options:
System.ServiceModel
System.ServiceModel.MessageLogging
System.ServiceModel.IdentityModel
System.ServiceModel.Activation
System.Runtime.Serialization
System.IO.Log
Cardspace
In configuration file, we will define a source to enable this configuration as follows:
<source name="System.ServiceModel.MessageLogging">
- Setting Tracing Level, we have the following available options, we need to set this tracing level to available options other than default "
Off
":
Off
Critical
Error
Warning
Information
Verbose
ActivityTracing
All
In configuration file, we can choose the above values for switchValue
attribute as follows:
<source name="System.ServiceModel.MessageLogging"
switchValue="Information">
- Configuring a trace listener:
For configuring a trace listener, we will add the following to config file.
<listeners>
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="d:\logs\messages.svclog" />
</listeners>
- Enabling message logging:
<system.serviceModel>
<diagnostics>
<messageLogging
logEntireMessage="true"
logMalformedMessages="false"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="false"
maxMessagesToLog="3000"
maxSizeOfMessageToLog="2000"/>
</diagnostics>
</system.serviceModel>
logEntireMessage
: By default, only the message header is logged but if we set it to true
, the entire message including message header as well as body will be logged.
logMalformedMessages
: This option logs messages that are rejected by WCF stack at any stage known as malformed messages.
logMessagesAtServiceLevel
: Messages those are about to enter or leave user.
logMessagesAtTransportLevel
: Messages those are about to encode or decode.
maxMessagesToLog
: Maximum quota for messages. Default value is 10000
.
maxSizeOfMessageToLog
: Message size in bytes.
Finally, putting all this together, the configuration file will appear like this:
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="messagelistener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="d:\logs\myMessages.svclog"></add>
</listeners>
</source>
</sources>
</system.diagnostics>
<system.serviceModel>
<diagnostics>
<messageLogging logEntireMessage="true"
logMessagesAtServiceLevel="false"
logMessagesAtTransportLevel="false"
logMalformedMessages="true"
maxMessagesToLog="5000"
maxSizeOfMessageToLog="2000">
</messageLogging>
</diagnostics>
</system.serviceModel>
Note: In this case, information will be buffered and not published to file automatically. So, we can set the autoflush
property of the trace under sources as follows:
<trace autoflush ="true" />
Other Top WCF Tutorials