silverlight域服务不允许返回通用对象

时间:2013-06-19 18:22:52

标签: wcf silverlight generics ria domainservices

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

但是在进行了更改后尝试在客户端中使用该服务时,该功能没有显示在上下文中,我已经搜索过它,我发现的是通用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;

}

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

您的方法被忽略,因为它与supported method type不匹配。 在将更改GetAll识别为查询方法之前。你可以通过添加属性来强制它。

[Query]
public Wrap<SomeClass> GetAll()

现在它不会默默地消失。但是生成编译时错误:

  

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