Исключение клиента WCF - «Тип не может быть добавлен в список известных типов»
-
30-09-2019 - |
Вопрос
У меня проблемы с созданием клиентского прокси 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, используя «Добавить ссылку на сервис» в против, он не удается, а журнал Trace говорит
Тип «WCFProxytest.Classa» не может быть добавлен в список известных типов, поскольку другой тип «WCFPROXYTEST.CLASSB» с тем же именем контракта данных «http://schemas.microsoft.com/2003/10/serialization/arrays:Arrayofkeyvalueofstringytype.'уже присутствует. Если есть разные коллекции определенного типа - например, списокu003CTest> и тест [], они не могут быть добавлены как известные типы. Рассмотрим указание только одного из этих типов для дополнения к известному списку типов.
Я вижу, что говорит сообщение об ошибке, но есть в другой форме (кроме рефакторинга классов). Я имею дело с устаревшей системой, которая имеет занятия, написанные таким же образом, как в моем примере, и переписывая их, не является вариантом, поскольку этот материал сидит в самом ядре системы: S
Есть идеи? Спасибо!
Решение
Я решил реформировать код таким образом, чтобы мне не приходилось предоставлять два известных пьеса, которые окажутся вокруг проблемы. Около 300 синтаксических ошибок позже, что работало. Я был бы заинтересован в любых других способах сделать это, хотя ...
Другие советы
Попробуйте добавить:
[KnownType(typeof(Dictionary<string, ITest>))]