Enabling WCF Tracing in Windows Azure WCF Web Role

When you create a Windows Azure WCF Web Role you will see that WCF tracking is disabled by default. The original web.config looks like as below:

 <?xml version="1.0"?>
 <configuration>
 <!-- To collect diagnostic traces, uncomment the section below. 
 To persist the traces to storage, update the DiagnosticsConnectionString setting with your storage credentials.
 To avoid performance degradation, remember to disable tracing on production deployments.
 <system.diagnostics> 
 <sharedListeners>
 <add name="AzureLocalStorage" type="WCFServiceWebRole.AzureLocalStorageTraceListener, WCFServiceWebRole"/>
 </sharedListeners>
 <sources>
 <source name="System.ServiceModel" switchValue="Verbose, ActivityTracing">
 <listeners>
 <add name="AzureLocalStorage"/>
 </listeners>
 </source>
 <source name="System.ServiceModel.MessageLogging" switchValue="Verbose">
 <listeners>
 <add name="AzureLocalStorage"/>
 </listeners>
 </source>
 </sources> 
 </system.diagnostics> -->
 <system.diagnostics>
 <trace>
 <listeners>
 <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
 name="AzureDiagnostics">
 <filter type="" />
 </add>
 </listeners>
 </trace>
 </system.diagnostics>
 <system.web>
 <compilation debug="true" targetFramework="4.0" />
 </system.web>
 <system.serviceModel>
 <behaviors>
 <serviceBehaviors>
 <behavior>
 <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
 <serviceMetadata httpGetEnabled="true"/>
 <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
 <serviceDebug includeExceptionDetailInFaults="false"/>
 </behavior>
 </serviceBehaviors>
 </behaviors>
 <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
 </system.serviceModel>
 <system.webServer>
 <modules runAllManagedModulesForAllRequests="true"/>
 </system.webServer>
 </configuration>
 

WCF Service Web Role implements WCF tracing by default and puts it in the local storage To enable, WCF tracing you would need to modify web.config as below:

  1. Enable SharedListeners -> AzureLocalStorage
  2. Configure messageLogging with following properties:
 <diagnostics>
 <messageLogging maxMessagesToLog="3000" logEntireMessage="true" logMessagesAtServiceLevel="true" logMalformedMessages="true" logMessagesAtTransportLevel="true" />
</diagnostics>
 
 

The final web.config looks as below:

 <?xml version="1.0"?>
 <configuration>
 <!-- To collect diagnostic traces, uncomment the section below. 
 To persist the traces to storage, update the DiagnosticsConnectionString setting with your storage credentials.
 To avoid performance degradation, remember to disable tracing on production deployments. -->
 <system.diagnostics> 
 <sharedListeners>
 <add name="AzureLocalStorage" type="WCFServiceWebRole.AzureLocalStorageTraceListener, WCFServiceWebRole"/>
 </sharedListeners>
 <sources>
 <source name="System.ServiceModel" switchValue="Verbose, ActivityTracing">
 <listeners>
 <add name="AzureLocalStorage"/>
 </listeners>
 </source>
 <source name="System.ServiceModel.MessageLogging" switchValue="Verbose">
 <listeners>
 <add name="AzureLocalStorage"/>
 </listeners>
 </source>
 </sources> 
 </system.diagnostics> 
 <system.diagnostics>
 <trace>
 <listeners>
 <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
 name="AzureDiagnostics">
 <filter type="" />
 </add>
 </listeners>
 </trace>
 </system.diagnostics>
 <system.web>
 <compilation debug="true" targetFramework="4.0" />
 </system.web>
 <system.serviceModel>
 <diagnostics>
 <messageLogging maxMessagesToLog="3000" logEntireMessage="true" logMessagesAtServiceLevel="true" logMalformedMessages="true" logMessagesAtTransportLevel="true" />
 </diagnostics>
 <behaviors>
 <serviceBehaviors>
 <behavior>
 <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
 <serviceMetadata httpGetEnabled="true"/>
 <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
 <serviceDebug includeExceptionDetailInFaults="false"/>
 </behavior>
 </serviceBehaviors>
 </behaviors>
 <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
 </system.serviceModel>
 <system.webServer>
 <modules runAllManagedModulesForAllRequests="true"/>
 </system.webServer>
 </configuration>
 

That's it.