2013-04-24 4 views
0

Возможно, мой вопрос не имеет смысла, но я постараюсь разоблачить свою проблему: я хотел бы предоставить пользовательские данные (основанные на поставщике отражения) через службу данных WCF.Служба данных и динамическая структура данных WCF

Эти данные являются результатом сложных запросов, и его структура может быть очень переменной. Я не могу моделировать его через 4 или 5 пользовательских классов, которые я бы раскрыл через Dataservice.

Например, у меня есть результат, например [дата, имя, возраст, функция] или [дата, время, страница, тип], [Страна, хиты, рои] ... и т. Д. Я не могу генерировать все комбинации результатов в пользовательских классах и выставлять их через службу данных WCF.

Итак, можно ли выставить данные, имеющие очень переменную структуру? Когда я вижу, что может сделать Azure Table, я думаю, что это возможно, но я не могу понять, как он работает.

ответ

0

В OData в общем, вы можете сделать это с открытыми типами. Тип объекта объявлен как открытый в $metadata документе службы путем установки атрибута OpenType в true так:

<EntityType Name="Customer" OpenType="true"> 
... 
</EntityType> 

Это означает, что экземпляры этого типа объекта может иметь любое количество незадекларированных свойств добавляют к ним динамически (в дополнение к любым объявленным свойствам типа).

Поставщик услуг передачи данных служб WCF, однако, не поддерживает поддержку открытых типов из коробки. Чтобы использовать открытые типы с помощью служб данных WCF, вам необходимо реализовать пользовательский поставщик (т. Е. Обеспечить реализацию IDataServiceQueryProvider и IDataServiceMetadataProvider). За помощью в написании пользовательских поставщиков я рекомендую блог блога Алекса here.

+0

Спасибо, я посмотрю открытые типы. Это звучит хорошо :) –

0

Я читал серию блога Алекса, но он не использовал свойства открытых типов. Вместо этого он раскрывает нетипизированную/RO & RW технику, но я не думаю, что она подходит моей проблеме ...

+0

В 'IDataServiceQueryProvider' есть метод [GetOpenPropertyValue] (http://msdn.microsoft.com/en-us/library/system.data.services.providers.idataservicequeryprovider.getopenpropertyvalue (v = vs. 103) .aspx), которую вы хотите реализовать для поддержки открытых свойств. Кроме того, в вашей реализации 'IServiceMetadataProvider',' ResourceType', представляющий тип, который вы хотите открыть (dyanamic), должен иметь свойство IsOpenType' равным true. –

Смежные вопросы