Intercepting Client Calls

To intercept client-side calls WCF provides the interface IClientMessageInspector, defined as:

public interface IClientMessageInspector
{
   object BeforeSendRequest(ref Message request,IClientChannel channel);
   void AfterReceiveReply(ref Message reply,object correlationState);
}

The BeforeSendRequest( ) method is called just before the message is sent down the wire, allowing you to affect the request message. Similarly, the AfterReceiveReply( ) method is your chance to interact with the reply message for post-call processing.

The client runtime represented by the ClientRuntime class contains a collection of message inspectors:

public sealed class ClientRuntime
{
   public SynchronizedCollection<IClientMessageInspector> MessageInspectors
   {get;}

  //More members
}

You can add your message inspector to the collection by associating the proxy with an endpoint behavior. That behavior needs to add the inspector in the ApplyClientBehavior( ) method:

public interface IEndpointBehavior
{
   void ApplyClientBehavior(ServiceEndpoint endpoint,ClientRuntime clientRuntime);
   //More members
}

To encapsulate these steps I wrote the class InterceptorClientBase<T> defined in Example E-4.

Example E-4. The InterceptorClientBase<T> class

public abstract class InterceptorClientBase<T> : ClientBase<T> where T : class { public InterceptorClientBase( ) { Endpoint.Behaviors.Add(new ClientInterceptor(this)); } public InterceptorClientBase(string endpointName) : base(endpointName) { Endpoint.Behaviors.Add(new ...

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

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.