It is very important to note that the assumption that you indicate in your post:
"when the data contract changes, you must define a new vs of data in the new namespace"
not always true. See “Contract data versions” on MSDN for a number of cases where changing the data contract is not interrupted and therefore may not require any action, except possibly changing the internal implementation of your service method to handle the presence / absence of certain data due to differences between versions of the data contract.
In this particular example, I would question how the two versions of the method called AddCustomer can differ greatly in their intention, which justifies the creation of a new service interface. Without seeing your old and new data contracts, I cannot know for sure, but I assume that the real problem is that this method has evolved to accept additional information about the client.
If true, then this is very similar to the situation with optional arguments in a method call. WCF is designed to handle this scenario very nicely, like an inextricable change to a data contract. As long as you can follow the recommendations in "Best Practices: Data Versioning" on MSDN, then calls that deliver either the old or the new version of the Contract will be fully approved by your existing service interface. Your service method will receive the data that is possible, given the combination of client and server data contracts.
I would keep my service interface consistent, simple and clean (i.e., avoid doing things like IServiceNew), and instead just add data to the contract and modify the AddCustomer implementation to adapt to the data it received.
source share