Объявление известных типов для контрактов данных в разных сборках - PullRequest
2 голосов
/ 11 июня 2009

У меня есть метод в службе WCF, который возвращает сложный тип (myComplexResult), который включает в качестве одного из своих членов список (Of Common.myBaseClass). Я хочу, чтобы этот список содержал элементы, которые по-разному могут иметь тип Foo.myClass1 и Bar.myClass2, оба из которых наследуются от Common.myBaseClass. Обратите внимание, что все эти классы определены в разных сборках.

Служба выдает это исключение:

Тип 'Foo.myClass1' с названием контракта данных «MyClass1: http://mynamespace/foo/' не ожидается Добавить любые типы не статически известен к списку известных типы - например, с помощью Атрибут KnownTypeAttribute или добавив их в список известных типов передано в DataContractSerializer.

Хорошо, я понимаю, что мне нужно объявить myClass1 и myClass2 как известные типы myBaseClass, чтобы DataContractSerializer знал, что с ними делать. Я не могу сделать очевидную вещь и украсить класс myBaseClass с помощью атрибутов KnownType для myClass1 и myClass2, поскольку это будет означать добавление ссылок на сборки Foo и Bar, что вызывает циклическую зависимость.

Я надеялся использовать объявленные типы в моем конфигурационном файле, и я попробовал это:

<system.runtime.serialization >
    <dataContractSerializer >
        <declaredTypes >
            <add type ="Common.myBaseClass, Common">
                <knownType type ="Foo.myClass1, Foo" />
                <knownType type ="Bar.myClass2, Bar" />
            </add>
        </declaredTypes>
    </dataContractSerializer>
</system.runtime.serialization>

Похоже, это не помогло, поэтому я попытался добавить атрибут KnownType в myComplexResult:

  <DataContract(name:="myComplexResult", [namespace]:="http://mynamespace/coo/")> _
    <KnownType(GetType(Foo.myClass1))> _
    Public Class myComplexResult
        <DataMember(name:="myList")> _
        Public myList As List(Of Common.myBaseClass)

Но я все еще получаю ту же ошибку. Помогите! Что мне делать?

1 Ответ

3 голосов
/ 12 июня 2009

Моя вина. Я перепробовал, и оба решения, которые я разместил выше, действительно работают. Я думаю, что это тот случай, когда я просто не обновляю ссылку на сервис в моем тестовом проекте перед запуском теста - упс !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...