WCF客户端代理异常 - “类型无法添加到已知类型列表”

时间:2010-08-23 10:48:26

标签: wcf proxy client serviceknowntype

我在为服务代码创建WCF客户端代理时遇到问题,如下例所示:

// data classes
[KnownType(typeof(ClassA))]
[KnownType(typeof(ClassB))]
public abstract class BaseClass : Dictionary<string, ITest>
{
}

public class ClassA : BaseClass
{
}

public class ClassB : BaseClass
{
}


public interface ITest
{
}

// service
[ServiceContract]
public interface IService1
{
    [OperationContract]
    BaseClass Method();
}

public class Service1 : IService1
{
    public BaseClass Method()
    {
        ...
    }
}

每当我尝试使用VS中的“添加服务引用”创建WCF代理时它会失败并且跟踪日志会显示

  

类型'WcfProxyTest.ClassA'无法添加到已知类型列表中,因为已存在具有相同数据协定名称“http://schemas.microsoft.com/2003/10/Serialization/Arrays:ArrayOfKeyValueOfstringanyType”的其他类型“WcfProxyTest.ClassB”。如果存在特定类型的不同集合 - 例如,List&lt; Test&gt;和Test [],它们不能同时作为已知类型添加。请考虑仅指定其中一种类型以添加​​到已知类型列表中。

我可以看到错误消息的内容,但是除了重构类之外还有其他方法吗?我正在处理遗留系统,该系统的类以与我的示例相同的方式编写,并且重写它们不是一个选项,因为这些东西位于系统的核心:S

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

我决定以这样的方式重构代码,以至于我不必提供两个KnownTypes来解决问题。之后大约有300个语法错误。我会对任何其他方式感兴趣但是......

答案 1 :(得分:0)

尝试添加:

[KnownType(typeof(Dictionary<string, ITest>))]