我有一个运行流畅的域服务,有些公开函数返回已定义实体的通用列表,但由于某种原因,我添加了一些常见信息,所以我创建了一个通用对象来包装集合以及我需要的额外信息返回。
但是在进行了更改后尝试在客户端中使用该服务时,该功能没有显示在上下文中,我已经搜索过它,我发现的是通用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 :(得分: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'不是有效的实体类型。实体类型不能 通用的。