In this article we will look how we can trace and debug information in WCF services. There are some ready made tracelisteners provided by WCF. The base of these ready made trace listeners is .NET trace listener. So we will first understand the basic concept of trace listener and then go through the ready made tracelisteners provided by WCF.

'Tracelistener' are objects that get tracing information from the trace class and they output the data to some medium. For instance you can see from the figure 'TraceListener' how it listens to the trace object and outputs the same to UI, File or a windows event log. There are three different types of 'tracelistener' first is the 'defaulttracelistener' (this outputs the data to UI), second is 'textwritertracelistener' (this outputs to a file) and the final one is 'Eventlogtracelistener' which outputs the same to a windows event log.

Figure - TraceListener

Below is a code snippet for 'textwritertracelistener' and 'eventlogtracelistener'. Using 'textwritertracelistener' we have forwarded the trace's to 'ErrorLog.txt' file and in the second snippet we have used the 'Eventlogtracelistener' to forward the trace's to windows event log.

We will enable tracing on 'System.ServiceModel' tracing object. To enable tracing we need to enable the 'system.diagnostics' XML node in the 'web.config' file of the WCF service. We need to also define the type of listeners for the 'System.ServiceModel' listener object. So we add the 'listeners' tag with the type as 'System.Diagnostics.XmlWriterTraceListener'. We need to also define the file and path where the file is created. For the current scenario we have defined the file as 'Traces.svclog' and the folder as 'c:\' drive.

Now if you run the WCF service you can see a XML file created as shown below.

You can log WCF message at two levels one is service level and the other is transport level. Service level:-In this the messages are logged as they enter the user code or leave the user code. Transport level: - In this the messages are logged as they are ready to be encoded / decoded. All transport level, infrastructure messages and also reliable messaging is logged. You specify the message levels in the diagnostics node as shown in the below code snippet.

'Messagelogging' also has other attributes , below is the short description about the same.