JGWiessman está correto em dizer que a falta de DRYness em proxies gerados automaticamente não é custosa, porque você não mantém o código gerado pelo cliente. Altere-o no servidor, atualize suas referências nos clientes, trabalho feito.
No entanto, existe uma alternativa, se o cliente e o servidor forem .NET. Você pode colocar todos os seus objetos em uma montagem separada, referenciada pelo cliente e pelo servidor. Se você gerar automaticamente o cliente código, é simplesmente uma interface, usando os mesmos objetos que o servidor usa .
Faça isso apenas se os objetos que você está compartilhando forem objetos de dados estúpidos e não inclua nenhum código do lado do servidor, caso contrário, você estará expondo esse código ao seu cliente.
Se o cliente e o servidor estiverem usando a mesma versão do .NET, você pode dar um passo além e include a interface apenas por configuração . Mas você precisa ter cuidado aqui. A interface no lado do servidor requer o atributo ServiceContract e, portanto, faz referência ao assembly ServiceModel, portanto, se as versões forem diferentes, você poderá ter problemas.