0

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

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

有访问规则

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

当我通过 Web 浏览器访问此服务操作时,它会公开数据,但不会在提要和条目(AtomPub 格式)中公开数据,它也不允许我使用 $top、$orderby 等基本查询选项,抱怨这些“无法应用”到请求的资源”。我已经满足了http://msdn.microsoft.com/en-us/library/cc668788.aspx中指定的所有要求,但没有成功。任何帮助将不胜感激。谢谢。

4

1 回答 1

0

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

于 2010-06-24T09:22:31.297 回答