如何将动态构建类型的实例返回到期望接口的WCF服务?

时间:2009-04-01 13:25:27

标签: .net wcf

我想要一个返回接口的操作合约。

我的问题:

1)我想动态注册将返回的已知类型的服务,或者让WCF接受该类型。我注意到,除非它是由属性或服务的静态方法标记的已知类型,否则该方法将失败。

2)我想在客户端,能够从消息构造接口的动态实现者。

我不想弄乱消息。我只是希望隐藏实现细节。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的情况:我认为你拥有来设计使用[KnownType]属性,以便序列化器知道要等待哪个实现。

关键是串行器接收一些字节,只有很少的关于如何读取它们的元数据(主要是类型的名称)。这就是为什么它需要知道这些字节应该代表哪种类型,以及“知道”这种类型。 如果没有这些信息,序列化程序绝对无法找出实现接口功能的几个字段的位置。

但是,您可以直接使用DataContractSerializer在运行时添加新的KnownTypes(即动态)

有关该主题的大量信息here

答案 1 :(得分:0)

您可以通过使用KnownTypeAttribute的特定重载来实现一个返回DataContract的已知类型的方法,并为其提供将已知类型作为数组返回的方法的名称。该方法可以返回仅在运行时已知的类型:

[DataContract]
[KnownType("GetKnownTypes")]
public class MyDataContract
{
   public int X { get; set; }

   public static Type[] GetKnownTypes()
   {
      return new Type[] { typeof(Class1), typeof(Class2) }; 
   }
}
相关问题