Динамически созданный класс как DataContract в WCF

Есть ли способ вернуть массив объектов типа DynamicClass из метода WCF?

Я использую Динамическая библиотека Linq в моей службе WCF, чтобы select столбцов таблицы базы данных, в соответствии с запросом от клиентов. Код клиента должен выглядеть так:

//client side code
string whereClause = "FeatureId >= 6 and FeatureId <= 180";
string selectClause = "New(FeatureName as Name, FeatureId as Id)";
client.RequestAsync("Feature", "FeatureDB", whereClause, selectClause);

Feature — это имя таблицы, из которой я хочу select только два столбца, а именно. FeatureName и FeatureId, удовлетворяющие условию в предложении where.

Здесь проблема в том, что запрос работает на сервере нормально, но WCF не может отправить его обратно клиенту. Я предполагаю, что динамически созданный класс, который определяет только выбранные столбцы, не объявлен DataContract, поэтому WCF не может с ним работать.

Так какое-нибудь решение этой проблемы?

Или любая альтернатива? Цель состоит в том, что я не хочу возвращать все столбцы таблицы базы данных, потому что мне не нужны все они на стороне клиента. Поэтому я не вижу смысла отправлять все столбцы обратно клиенту, который все равно их отбросит.


person Nawaz    schedule 08.06.2011    source источник


Ответы (2)


Вы можете обойти это, используя Reflection, чтобы украсить ваши поля соответствующими атрибутами, однако это все еще может представлять проблему для любого клиентского процесса, который использует вашу службу WCF, поскольку сгенерированный раздел вашего контракта службы будет недетерминированным. , то есть xs:любой в схеме.

Лучше постарайтесь строго печатать свои контракты WCF везде, где это возможно.

person DaveRead    schedule 08.06.2011

Рассматривали ли вы возможность внедрения службы данных WCF?

person Vedran    schedule 08.06.2011
comment
Что оно делает? Делает ли он то, что я хочу делать? Ответ должен попытаться ответить на мой вопрос. Или же это больше подходило для комментария. - person Nawaz; 08.06.2011
comment
...позволяет отображать любой источник данных как веб-канал данных... Я предлагаю вам посмотреть это видео: channel9.msdn.com/events/MIX/MIX10/FT12 - person Vedran; 09.06.2011
comment
Это не отвечает на мой вопрос. - person Nawaz; 09.06.2011