Опубликовать атрибуты DataAnnotation в службе WCF и восстановить их в классах прокси-клиентов?
У меня есть WCF, который выставляет различные классы. Я применил атрибуты DataAnnotation к некоторым свойствам.
Я хочу, чтобы они также были созданы в потребительском проекте, есть ли способ сделать это?
1 ответ
Нет. WCF - это система, основанная на сообщениях, поэтому все, что связывает вашего клиента и вашу службу, - это сериализованные сообщения XML (и их формат) по проводам.
Когда вы создаете прокси, все, что может сделать среда выполнения WCF, - это заново создать ваши структуры данных, чтобы при сериализации XML одного из ваших классов на стороне клиента представление в проводнике было таким же, как и в классе на стороне сервера.
У клиента нет возможности "проникнуть" в недра сервера и узнать о специфических вещах.NET, таких как аннотации данных...
Тем не менее, если вы контролируете оба конца коммуникации, например, пишете как сервер, так и клиент, есть другой подход:
- создайте отдельную сборку библиотеки классов с вашими контрактами на обслуживание и данные (только контракты)
- перед тем, как добавить ссылку на службу, обратитесь к этой общей общей сборке из кода вашего сервера, а также из проекта на стороне клиента.
- при добавлении ссылки на службу по умолчанию среда выполнения WCF будет повторно использовать существующие типы; так что, если он добавляет ссылку на службу к вашей службе, и вам нужен класс данных
MyData
и этот класс существует в указанной общей сборке, среда выполнения WCF будет использовать его повторно (вместо повторного создания нового отдельного прокси-класса на стороне клиента)
С помощью этого "трюка" вы можете совместно использовать определенные классы (например, классы данных) между сервисом и клиентом, включая все свои атрибуты.NET на нем.