2013-06-19 38 views
0

我有一个域名服务运行平稳,一些公开的函数返回的是定义实体的通用列表,但由于某些原因,我添加了一些公共信息,所以我创建了一个通用对象以收集我需要返回的额外信息包裹收集。silverlight域名服务不允许返回一个通用对象

但是当后作出改变,并尝试在客户端使用该服务,该功能不会在上下文中显示出来,我已经搜索一下它,我发现了什么是属性的泛型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; 

} 

回答

0

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

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

0

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

您的方法被忽略,因为它不匹配supported method type。 更改前GetAll被识别为查询方法。您可以通过添加属性强制执行该操作

[Query] 
public Wrap<SomeClass> GetAll() 

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

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

相关问题