2013-06-19 41 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'不是有效的實體類型。通用的實體類型不能爲 。

相關問題