Friday, 1 January 2016

How to enable WCF Tracing?




In this post I am going to take the same example to demonstrate how to enable wcf service trace. By default WCF service does not trace any messages. To add wcf tracing, please follow below steps –  

Step-1  Open your web.config file from solution explorer. The contents of newly created Service would look a like –


<? Xml version=1.0?>

<configuration>
  <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>


Note:- In above code tracing and message logging both are not enabled. 


Step-2 To enable the MessageLogging we need to add following code in above web.config file. The important point is MessageLogging can be done at two levels. i.e. service level and another is transport level. Please add given code after the </behaviours> tag highlighted in above code snippet. 
 
    <diagnostics>

      <messageLogging logEntireMessage=true
                      logMessagesAtServiceLevel=false
                      logMessagesAtTransportLevel=false
                      logMalformedMessages=true
                      maxMessagesToLog=5000
                      maxSizeOfMessageToLog=2000>
      </messageLogging>
    </diagnostics>


Attribute details:-
Sr. No
Attribute
Description
1
logEntireMessage
“true” value indicates that the entire message should be logged.
2
logMessagesAtServiceLevel
“true” means service-level messages will be logged.
3
logMessagesAtTransportLevel
Transport level messages will be logged if set to “true”.
4
logMalformedMessages
Malformed message should be logged if set to “true”
5
maxMessagesToLog
This is the number that tells how many messages to be logged.
6
maxSizeOfMessageToLog
The value indicates the maximum size of the message log. Default is 256Kb


Step-3 As mentioned above, we need to define trace source and TraceListener to activate wcf tracing. In below code snippet we have added both Trace Source mentioned earlier and created an object of a tracelistener named as “TextLogger” which will act as a shared tracelistener for both trace sources.Copy and paste below code snippet just after </system.webServer> tag highlighted in first 
 
  <system.diagnostics>
    <trace autoflush=true indentsize=4 />
    <sources>
      <source name=System.ServiceModel switchValue=All>
        <listeners>
          <add name=textLogger />
        </listeners>
      </source>
      <source name=System.ServiceModel.MessageLogging switchValue=All>
        <listeners>
          <add name=textLogger />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add name=textLogger
           type=System.Diagnostics.TextWriterTraceListener
           initializeData=C:WCF_logswcf_svclogging.txt />
    </sharedListeners>
  </system.diagnostics>

Please note : Here we have set autoflush=true. If we don’t do that there will be a possibility that the trace file would be corrupted. It would open in any text editor, however WCF trace viewer would not be able to open such corrupted file. 

Step-4 Just change the location of a trace output file highlighted in yellow in above code as per your convenience. Save the file and we are done with the process of enabling wcf tracing. Now execute the WCF service and check the log/trace file created at above highlighted location. 

Step-5 Complete code of Web.config file used in above example for MessageLogging and TraceListener is available here – 
 
<?xml version=1.0?>

<configuration>
  <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>
    <diagnostics>
      <messageLogging logEntireMessage=true
                      logMessagesAtServiceLevel=false
                      logMessagesAtTransportLevel=false
                      logMalformedMessages=true
                      maxMessagesToLog=5000
                      maxSizeOfMessageToLog=2000>
      </messageLogging>
    </diagnostics>
    <serviceHostingEnvironment multipleSiteBindingsEnabled=true />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests=true/>
  </system.webServer>
  <system.diagnostics>
    <trace autoflush=true indentsize=4 />
    <sources>
      <source name=System.ServiceModel switchValue=All>
        <listeners>
          <add name=textLogger />
        </listeners>
      </source>
      <source name=System.ServiceModel.MessageLogging switchValue=All>
        <listeners>
          <add name=textLogger />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add name=textLogger
           type=System.Diagnostics.TextWriterTraceListener
           initializeData=C:WCF_logswcf_svclog.txt />
    </sharedListeners>
  </system.diagnostics>
</configuration>



In the above post I ecplained how to enable WCF trace. I hope you enjoyed this post so please comment your feedback and queries. Thanks You.

No comments:

Post a Comment