If you generate the code automatically then you have a maintenance issue. You have to regenerate it again whenever you change the interface or any of the server configuration.
For this reason, I NEVER generate the client from exposed metadata.
The interface should be defined in one library. Let's call this library MyContractsLib. The service implementation should be in a separate assembly (which I'll call MyContractsImplementation). The client should go in another assembly.
The client should then use a ChannelFactory to create the service.
var cf = new ChannelFactory<MyContractsLib.MyContract>(this.EndpointName); MyContractsLib.MyContract serviceProxy = cf.CreateChannel();
The only scenario where it's warranted is if the service is developed by a third-party, and you independently writing the client application.
If you have the time and inclination, See this presentation goes into this in depth.