Реализация IEquatable в классе, отмеченном DataContract. Это работает? - PullRequest
1 голос
/ 17 мая 2010

То, что я пытаюсь выполнить, - это возможность использовать List<>.Contains() с использованием пользовательских структур данных, возвращаемых службой WCF.

Я реализовал IEquatable<>.Equal s, но он не работает на стороне клиента. Contains () всегда возвращает false. Мне интересно, если метод Contains () на самом деле является частью класса, когда он собран на стороне клиента.

Ответы [ 2 ]

0 голосов
/ 17 мая 2010

Нет. Веб-службы обычно подразумевают независимость от платформы, поэтому они определяют такие вещи, как контракты на операции (для операций, выполняемых на сервере) и контракты на данные (для обмена объектами, состоящими из простых полей данных). Но они не определяют методы для объектов, так как это потребует знания клиентских платформ. (Например, как бы вы распаковали свой IEquatable <>. Равен IL-код клиенту Mac?)

Что вы можете сделать, если у вас есть полный контроль над клиентами вашей службы WCF, - это развернуть одну и ту же библиотеку как на клиентах, так и на сервере. То есть вы можете поместить свои классы контрактов данных в Data.dll и развернуть их как на клиенте, так и на сервере (в отличие от использования прокси-классов по умолчанию, сгенерированных из контракта на обслуживание клиента).

0 голосов
/ 17 мая 2010

Нет, это не будет работать. Действия, подобные реализации IEquatable<T>, добавляют поведение к типу. Контракты данных предназначены только для указания данных, а не поведения. Поведение не будет скопировано, когда клиент добавит ссылку на ваш тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...