Исключение прокси клиента WCF - «Тип не может быть добавлен в список известных типов» - PullRequest
3 голосов
/ 23 августа 2010

У меня проблемы с созданием клиентского прокси 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()
    {
        ...
    }
}

Всякий раз, когда я пытаюсь создать прокси WCF с помощью «Добавить ссылку на службу» в VS, происходит сбой, и журнал трассировки говорит

Тип 'WcfProxyTest.ClassA' не может быть добавлен в список известных типов, поскольку другой тип 'WcfProxyTest.ClassB' с таким же именем контракта данных 'http://schemas.microsoft.com/2003/10/Serialization/Arrays:ArrayOfKeyValueOfstringanyType' уже существует.Если есть разные коллекции определенного типа - например, List и Test [], они не могут быть оба добавлены как известные типы.Попробуйте добавить только один из этих типов для добавления в список известных типов.

Я могу видеть, что говорит сообщение об ошибке, но есть ли другой способ обойти это (кроме рефакторинга классов).Я имею дело с унаследованной системой, в которой классы написаны так же, как в моем примере, и переписать их нельзя, так как этот материал находится в самом ядре системы: S

Есть идеи?Спасибо!

Ответы [ 2 ]

1 голос
/ 24 августа 2010

Я решил провести рефакторинг кода таким образом, чтобы мне не нужно было предоставлять два типа KnownType, которые помогут мне решить проблему. Около 300 синтаксических ошибок позже это сработало. Я был бы заинтересован в любых других способах сделать это, хотя ...

0 голосов
/ 23 августа 2010

Попробуйте добавить:

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