Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ignore certain WCF services from WCF trace logs

Tags:

wcf

wcf-client

The application I am building exposes several WCF services (A, B). Internally, it consumes several other WCF services running on our internal network (X, Y).

Using WCF message logging, I wish to only log traffic between our services A, B and the external clients who call them.

No data between my services (A,B) and the backend services (X,Y) should be logged by WCF.

Filtering via system.serviceModel/diagnostics/messageLogging/filters was partially successful with:

    <filters>
      <add nodeQuota="10" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
        /s:Envelope/s:Header/*[contains(text(),"MyServiceA")]
      </add>
      <add nodeQuota="10" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none">
        /s:Envelope/s:Header/a:Action[contains(text(),"MyServiceA")]
      </add>
    </filters>

This however fails to capture responses from our service, as SOAP responses do not contain text to filter on.

The WCF MessageLogTraceRecord does contain the SOAP Action, but I can not seem to construct a filter to access it:

<MessageLogTraceRecord>
  <Addressing xmlns="http://schemas.microsoft.com/2004/06/ServiceModel/Management/MessageTrace>
     <Action>http://opia.api.translink.com.au/ApiLocationService/2012/04/IApiLocationService/ResolveInputServiceFaultFault</Action>
  </Addressing>
  <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
      <s:Body>
        ...

WCF message logging and end to end tracing are enabled with all options set to true. ActivityTracing and Warning level logging are enabled.

like image 719
geoffreys Avatar asked Apr 19 '12 05:04

geoffreys


1 Answers

Try this

<filters>
      <add nodeQuota="10" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
        /s:Envelope/s:Header/*[contains(text(),"MyServiceA")]
      </add>
      <add nodeQuota="10" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none">
        /s:Envelope/s:Header/a:Action[contains(text(),"http://opia.api.translink.com.au/ApiLocationService/2012/04/IApiLocationService/ResolveInputServiceFaultFault")]
      </add>
    </filters> 

Replaced the text "MyServiceA" in action filter with the URL in MessageLogTraceRecord > Action

like image 59
Milan Raval Avatar answered Nov 10 '22 08:11

Milan Raval