If you have access to assemblies that contain types that define a service contract, operations, and data contracts, then you can simply create proxies on the fly using ChannelFactory. In this case, you will not need to receive any service metadata, since you already have access to all the information necessary to call the service.
for instance
// Create service proxy on the fly
var factory = new ChannelFactory<IMyServiceContract>("NameOfMyClientEndpointInConfigFile");
var proxy = factory.CreateChannel();
// Create data contract
var requestDataContract = new MyDataContract();
// Call service operation.
var responseDataContract = proxy.MyServiceOperation(requestDataContract);
, , .