WCF客户端代理例外情况-“;无法将类型添加到已知类型列表中”;

WCF客户端代理例外情况-“;无法将类型添加到已知类型列表中”;,wcf,proxy,client,serviceknowntype,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 { } pu

我在为服务代码创建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()
    {
        ...
    }
}
//数据类
[知识类型(类别A))]
[知识类型(类别B))]
公共抽象类基类:字典
{
}
公共类ClassA:基类
{
}
公共类ClassB:基类
{
}
公共接口测试
{
}
//服务
[服务合同]
公共接口IService1
{
[经营合同]
基类方法();
}
公共类服务1:IService1
{
公共基类方法()
{
...
}
}
每当我尝试在VS中使用“添加服务引用”创建WCF代理时,它都会失败,跟踪日志显示

无法将类型“WcfProxyTest.ClassA”添加到已知类型的列表中,因为已存在另一个具有相同数据协定名称“”的类型“WcfProxyTest.ClassB”。如果存在特定类型的不同集合(例如,List和Test[]),则不能将它们都添加为已知类型。考虑仅指定这些类型中的一种以添加到已知类型列表。

我可以看到错误消息是怎么说的,但是有没有其他方法可以解决这个问题(重构类除外)。我正在处理一个遗留系统,它的类的编写方式与我的示例中的相同,重写它们不是一个选项,因为这些东西位于系统的核心:S

有什么想法吗?谢谢

尝试添加:

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

我决定重构代码,这样我就不必提供两个知识点来解决问题。大约300个语法错误之后,这就奏效了。不过我对其他的方法很感兴趣

刚试过,但我得到了一个不同的错误。。。这基本上是相同的错误,只是它现在抱怨我刚才添加的KnownType:“类型'WcfTestService.ClassB'无法添加到已知类型列表中,因为具有相同数据协定名称''的另一类型'System.Collections.Generic.Dictionary`2[System.String,WcfTestService.ITest]'已经存在”不能将接口作为已知类型。。必须列出从ITest继承的所有对象(假设ITest是一个接口)