在此示例中,我在为服务代码创建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”不能添加到已知类型列表中,因为另一种类型的“ WCFProxyTest.ClassB”具有相同的数据合同名称'http://schemas.microsoft.com/2003/10/serialization/arrays:arrayofkeyvalueofstringanytype'已经存在。如果特定类型的集合不同 - 例如,列表u003CTest>和测试[],它们都不能添加为已知类型。考虑仅指定这些类型中的一种以添加到已知类型列表中。

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

有任何想法吗?谢谢!

有帮助吗?

解决方案

我决定以这样的方式重新分配代码,以至于我不必提供两个知名人士,这使我解决了问题。后来大约有300个语法错误。我会对其他任何方法感兴趣...

其他提示

尝试添加:

[KnownType(typeof(Dictionary<string, ITest>))]
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top