Использовать пользовательский класс, отличный от WCF, в WCF

#c# #wcf

#c# #wcf

Вопрос:

У меня есть служба WCF, размещенная в IIS. Цель состоит в том, чтобы клиенты выполняли вызов и получали пользовательский класс, который не определен как класс WCF и определен в другом проекте / dll. Как я мог это сделать?

Ответ №1:

Вам нужно украсить этот пользовательский класс [DataContract] атрибутом, а также все его общедоступные свойства [DataMember] атрибутом.

Вам также нужно, чтобы и клиент, и сервер включали этот проект / dll.

Комментарии:

1. Предположим, у меня есть родительский класс, скажем, «A», который объявлен как [DataContract] . теперь у меня есть другой дочерний класс, скажем, «B», унаследованный от «A», и он не объявлен в [DataContract] . Теперь я использую dll класса «B» в другом классе WCF в качестве возвращаемого типа функции. Будет ли это работать? Если нет, то что мне нужно делать?

2. Нет, этого не будет. Вам также нужно явно украсить B с помощью [DataContract] . В качестве альтернативы вы можете изменить тип возвращаемого значения вашей функции на A и по-прежнему возвращать объект типа B (если это работает для вас).

3. Мой возвращаемый тип — «A». Таким образом, [DataCotract] не является наследуемой вещью. Есть ли какой-либо другой способ справиться с этим?

4. Что вы имеете в виду под «другим», чего вы хотите достичь, в чем недостаток этого метода в вашем случае…

5. У нас есть приложение для Windows. Для которого требуется ссылка на класс. но во время выполнения в соответствии с параметром класс WCF решит, какая ссылка на класс должна быть возвращена. эти классы являются простыми классами, не использующими [DataContract] . теперь, как этого добиться? без изменения простых классов, поскольку они не могут быть изменены сейчас.