November 2008
Intermediate to advanced
784 pages
23h 28m
English
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); ...