Опубликовать атрибуты DataAnnotation в службе WCF и восстановить их на прокси-классах потребителей? - PullRequest
2 голосов
/ 01 марта 2011

У меня есть WCF, который выставляет различные классы.Я применил атрибуты DataAnnotation к некоторым свойствам.

Я хочу, чтобы они также генерировались в потребительском проекте, есть ли способ сделать это?

1 Ответ

3 голосов
/ 01 марта 2011

Нет. WCF - это система, основанная на сообщениях, поэтому все, что связывает вашего клиента и вашу службу, - это сериализованные в формате XML сообщения (и их формат) по проводам.

Когда вы создаете прокси, все, что может сделать среда выполнения WCF, - это заново создать ваши структуры данных, чтобы при сериализации XML одного из ваших клиентских классов представление на проводе было таким же, как и на сервере. боковой класс.

У клиента нет возможности «проникнуть» в недра сервера и узнать о специфических вещах .NET, таких как аннотации данных ...

Тем не менее, если вы контролируете оба конца коммуникации, например, вы пишете как сервер, так и клиент, есть другой подход, который вы можете использовать:

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

С помощью этого «трюка» вы можете обмениваться определенными классами (например, классами данных) между сервисом и клиентом, включая все свои атрибуты .NET на нем

...