Вы не делаете ничего плохого - так работает WCF!
Когда вы создаете сервис, вы определяете методы сервиса и параметры (и их типы данных), которые ожидают эти сервисы. Это упаковано на стороне сервера и обычно предоставляется через обмен метаданными (MEX).
Когда клиент приходит и создает прокси на стороне клиента для вашего сервиса, все, на что он может положиться - это биты и кусочки в метаданных - описание методов сервиса (имена, параметры) и описание того, что XML будет выглядеть так, как будто он перемещается между клиентом и сервером.
Клиент и сервер в WCF общаются друг с другом через сериализованные (XML) сообщения - другого соединения нет - прямой связи или чего-либо еще. Таким образом, все, что может сделать клиент, это убедиться, что его типы данных, которые он создает на основе метаданных службы, будут сериализировать в тот же XML, что и служба, ожидают (и что он может десериализовать сообщения XML с сервера ).
Клиент создает новых типов на стороне клиента , которые будут иметь одинаковую «площадь присутствия XML» (такую же структуру в сериализованном XML) - но это все, что он может сделать. Вот почему вы получаете типы, которые очень похожи - но они отличаются (обычно в другом пространстве имен). Это также причина, по которой у вас не должно быть никакой функциональности (кода) в ваших контрактах данных на стороне сервера - вы не можете сериализовать функциональность через сообщения XML .....
Теперь, если вы управляете обоими концами коммуникационного провода (и сервером, и клиентом) и записываете их обоих в .NET, вы можете воспользоваться «ярлыком» для повторного использования типов. По сути, вам нужно сделать то, что вы сделали - поместить все типы и интерфейсы в отдельную сборку («Ядро»). Далее: до вы создаете свой прокси WCF на стороне клиента, убедитесь, что клиентский проект ссылается на эту "базовую" сборку. Когда вы создаете прокси на стороне клиента WCF со ссылкой на сборку «Core», вы можете сказать WCF «повторное использование типов в ссылочных сборках» - если у вас включен этот параметр (он включен по умолчанию), то, если ваши ссылочные сборки уже содержат тип данных, который соответствует потребностям клиента WCF, затем этот тип (из вашей сборки «Core») будет использоваться повторно (вместо созданного нового).
WCF - Добавить справочник услуг - Дополнительные параметры