Creating and Closing of WCF Proxies

Introduction

This tip discusses how to use DynamicProxy to hide the fact that a WCF proxy is closed after each call and re-created.

Background

Creating a WPF application using MVVM we had code, like view models calling services, or actually being dependent on an interface which would then be a service proxy. I wanted to have the proxy closed after each call (which is another discussion), but I didn't want the user of the proxy to have any knowledge of ICommunicationObject, because it would make testing harder and make things more complex. In general, I wanted to mock the service interface in my unit tests.

So I wanted to hide the fact that the implementation was in fact a service proxy and let the implementation handle the configuration, creation and closing of the channel.

Using the Code

The first thing I made was a small helper class, ProxyWrapper, that would ensure proper closing of the proxy. If the service is faulted, Abort() should be called, etc.

After that, I looked into dynamic proxy generation using Castle.Core DynamicProxy. This came in handy, because I could dynamically create a class that implemented the ServiceContract from where I could intercept each call to any method on the proxy. Intercept the method call, create the channel using a reusable ChannelFactory, pass through the method arguments to the real instance of the proxy, and close the proxy after use.