我在为服务代码创建 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
有任何想法吗?谢谢!