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