Опубликовать атрибуты DataAnnotation в службе WCF и восстановить их в классах прокси-клиентов?

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

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

1 ответ

Решение

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

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

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

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

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

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

Другие вопросы по тегам