0

我有一个运行平稳的域服务,一些公开函数返回已定义实体的通用列表,但由于某种原因,我添加了一些通用信息,所以我创建了一个通用对象来用我需要返回的额外信息来包装集合。

但是在进行更改并尝试在客户端中使用该服务后,该功能不会出现在上下文中,我已经搜索过它,我发现的是通用 IQueryable 的属性

我的包装课

public class Wrap<T>
{

   public String commonProperty { get; set; }
   public String anotherCommonProperty { get; set; }
   public List<T> items { get; set; }

}

在我的服务域中

public Wrap<SomeClass> GetAll()
{

  Wrap<SomeClass> myObject = new Wrap<SomeClass>();
  myObject.items = new List<SomeClass>();
  myObject.commonProperty = "some info";
  myObject.anotherCommonProperty = "some info";
  return myObject;

}
4

2 回答 2

0

WCF RIA 域服务不支持通用实体类型。 IEnumerable<T>并且IQueryable<T>是特殊情况。

您的方法被忽略,因为它与支持的方法类型不匹配。在更改之前GetAll被识别为查询方法。您可以通过添加属性来强制执行此操作。

[Query]
public Wrap<SomeClass> GetAll()

现在它并没有悄无声息地消失。但是会产生编译时错误:

类型“Wrap`1”不是有效的实体类型。实体类型不能是通用的。

于 2013-06-22T21:23:58.450 回答
0

也许[KnownType(typeof(SomeClass))]在类中添加属性Wrap<T>,问题是您需要为KnowType域中的每个类包含一个属性(这是因为您正在制作多态服务)。

并在服务中添加[ServiceKnownType(typeof(SomeClass))]方法GetAll(这是针对 wcf 服务的,我不知道是否对域服务有效)。

于 2013-06-19T22:00:57.140 回答