我在为服务代码创建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
有什么想法吗?谢谢!
答案 0 :(得分:1)
我决定以这样的方式重构代码,以至于我不必提供两个KnownTypes来解决问题。之后大约有300个语法错误。我会对任何其他方式感兴趣但是......
答案 1 :(得分:0)
尝试添加:
[KnownType(typeof(Dictionary<string, ITest>))]