WCF服务操作不会将数据公开为可查询

时间:2010-06-24 00:14:53

标签: wcf wcf-data-services service-operations

我有以下形式的服务操作:

[WebGet]
public IQueryable<BusinessObject> BusinessObjectsByType(string name)

使用访问规则

config.SetServiceOperationAccessRule("BusinessObjectsByType", ServiceOperationRights.All);

当我通过网络浏览器访问此服务操作时,它会公开数据但不会显示供稿和条目(AtomPub格式),也不会让我使用基本查询选项,如$ top,$ orderby等抱怨这些'无法应用于请求的资源'。我符合http://msdn.microsoft.com/en-us/library/cc668788.aspx中指定的所有要求,但没有成功。任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

如果BussinesObject未被识别为实体,则服务操作将被视为返回IEnumerable。要查询工作,服务操作必须返回IQueryable,其中T是实体类型。 假设EF或Reflection提供者,实体类型是具有键属性的类型(通过启发式或通过DataServiceKey属性),并且在IQueryable类型的上下文类上有一个属性。 如果BussinesObject不是实体,则WCF数据服务无法支持对服务操作结果的查询。有很多原因,仅举一例:为了序列化响应,每个对象必须具有唯一的URL(它的atom:id),以便能够生成唯一的URL,该对象必须具有关键属性。并且关键属性只能在实体上定义。