3

我在为服务代码创建 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<Test> 和 Test[],则它们不能同时添加为已知类型。考虑仅指定其中一种类型以添加​​到已知类型列表中。

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

有任何想法吗?谢谢!

4

2 回答 2

1

我决定重构代码,这样我就不必提供两个可以让我解决问题的 KnownTypes。后来大约 300 个语法错误起作用了。不过,我会对任何其他方式感兴趣...

于 2010-08-24T06:35:31.293 回答
0

尝试添加:

[KnownType(typeof(Dictionary<string, ITest>))]
于 2010-08-23T10:55:16.847 回答