【问题标题】:silverlight domain service don't allow return a generic objectsilverlight 域服务不允许返回通用对象
【发布时间】:2013-06-19 18:22:51
【问题描述】:

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

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

}

【问题讨论】:

    标签: wcf silverlight generics ria domainservices


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      WCF RIA 域服务不支持通用实体类型。IEnumerable&lt;T&gt;IQueryable&lt;T&gt; 是特殊情况。

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

      [Query]
      public Wrap<SomeClass> GetAll()
      

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

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

      【讨论】:

        猜你喜欢
        • 2010-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-27
        • 1970-01-01
        • 2016-09-20
        • 2021-12-04
        相关资源
        最近更新 更多