The Trace Interceptors

The first example I'll show of using the generic interceptors framework is for tracing and logging. Example E-5 shows a simple example of implementing a generic service-side interceptor called ParameterTracerInvoker.

Example E-5. The ParameterTracerInvoker

class ParameterTracerInvoker : GenericInvoker
{
   public ParameterTracerInvoker(IOperationInvoker oldInvoker) : base(oldInvoker)
   {}

   protected override void PreInvoke(object instance,object[] inputs)
   {
      Trace.WriteLine("Input Parameters: ");

      foreach(object argument in inputs)
      {
         Trace.WriteLine(argument.ToString(  ));
      }
   }
   protected override void PostInvoke(object instance,object returnedValue,
                                      object[] outputs,Exception exception)
   {

      foreach(object output in outputs)
      {
         Trace.WriteLine("Output Parameters: ");
         Trace.WriteLine(output.ToString(  ));
      }

      Trace.WriteLine("Returned: " + returnedValue ?? String.Empty);
   }
}

ParameterTracerInvoker derives from GenericInvoker. Its constructor accepts the old invoker and passes it to the constructor of GenericInvoker. The implementations of PreInvoke( ) and PostInvoke( ) trace to the Output window in Visual Studio the values of the input and output parameters, respectively. You can install the ParameterTracerInvoker on service operations by defining the OperationParameterTracerAttribute:

public class OperationParameterTracerAttribute : OperationInterceptorBehaviorAttribute { protected override GenericInvoker CreateInvoker(IOperationInvoker oldInvoker) { return new ParameterTracerInvoker(oldInvoker); ...

Get Programming WCF Services, 2nd Edition now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.