Usually, when I need to access WCF services from client applications, I derive from System.ComponentModel.ClientBase<T> for the appropriate service contract interface. This creates a client proxy for your service with the same contractual interface. I would say that deriving from ChannelFactory directly sounds like a bit of a round about way of accessing a WCF service...perhapse not 'round about', but definitely more work. If you want to abstract the service more, so your clients have a bit more independance from whatever your services are wrapping, just add another layer of classes around your proxies, and expose whatever interface meets the needs of your application (facade/adapter patterns). Then your free to change your services without screwing with your clients.