2013-04-24 57 views
0

也许我的问题没有意义,但我会尝试揭露我的问题:我想通过WCF数据服务公开自定义数据(基于反射提供程序)。WCF数据服务和动态数据结构

该数据是复杂请求的结果,其结构可能非常多变。我无法通过4或5个自定义类来建模它,这些类将通过Dataservice公开。例如,我可以得到[日期,姓名,年龄,功能]或[日期,时间,页面,类型],[国家,点击率,roi]等等的结果。我不可能在自定义类中生成所有结果组合,并通过WCF数据服务公开它们。

那么,是否有可能暴露一个结构变化很大的数据呢?当我看到Azure Table可以做什么时,我认为这是可能的,但我无法弄清它是如何工作的。

回答

0

在一般的OData中,您可以使用打开的类型来完成此操作。实体类型被声明为服务的$metadata文件中开放通过设置OpenType属性true这样的:

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

这意味着该实体类型的实例可能加入到他们的任何数量的未申报的属性动态地(除了该类型上的任何声明的属性)。

但是,WCF数据服务反射提供程序不提供对开箱类型的支持。为了在WCF数据服务中使用开放类型,您需要实现自定义提供程序(即,提供IDataServiceQueryProviderIDataServiceMetadataProvider的实现)。为了帮助编写定制提供商,我推荐Alex的博客系列here

+0

谢谢,我会看看打开的类型。这听起来不错:) – 2013-04-25 07:12:05

0

我读过亚历克斯的博客系列,但他没有使用开放式的属性。相反,他公开了一种无类型/ RO & RW技术,但我认为它不适合我的问题...

+0

在'IDataServiceQueryProvider'中,有一个方法[GetOpenPropertyValue](http://msdn.microsoft.com/en-us/library/system.data.services.providers.idataservicequeryprovider.getopenpropertyvalue(v = vs。 103).aspx),你会想要实现它来支持打开的属性。另外,在实现'IServiceMetadataProvider'时,表示想要打开的类型(dyanamic)的'ResourceType'应该将'IsOpenType'属性设置为true。 – 2013-04-25 17:18:54