Не отправляйте объекты клиентов по сети, создайте DTO из объекта клиентов, содержащего только ту информацию, которую вы хотите отправить, и отправьте ее вместо этого.
Это позволяет вам точно контролировать, какая информация отправляется, и соответствует намерениям WCF о передаче сообщений, а не объектов
Итак, создайте OrderDetailDto class
и заполните его данными из OrderDetail
, возвращаемыми при вызове метода в коде клиента. Украсьте OrderDetailDto
атрибутами DataContract
и DataMember
(здесь вы можете переименовать класс, чтобы при возвращении WCF он возвращался с именем OrderDetail
)
Повторите это для всех объектов в клиентском коде, чтобы на границе службы вы в основном конвертировали из DTO-> Клиентские объекты и Клиентские объекты-> DTO
EDIT
Хотя может существовать опция, которая позволяет тому, о чем вы просили (я не знаю об этом, но, надеюсь, кто-то еще мог бы это учитывать), учитывать, что при отправке использовать ваши клиентские объекты в качестве DTO, вы используете их для двух целей ( объект клиента и договор на сообщение), что противоречит принципу единой ответственности, и когда вы получите их на стороне клиента, они не будут одинаковыми объектами на стороне клиента, только DTO с одинаковыми свойствами, вы не сможете получить поведение в объектах на стороне клиента (по крайней мере, без совместного использования библиотек на стороне сервера и на стороне клиента).
Связывая контракт данных с объектами, вы также в конечном итоге вынуждены управлять изменениями в клиентских объектах и контрактах данных как единое целое. Когда они разделены, вы можете управлять изменениями объектов на стороне клиента без необходимости изменять DTO, вы можете просто заполнить их по-другому.
Хотя кажется, что создание ОТО требует большой работы, в конце концов, я думаю, оно того стоит.