У меня есть приложение, созданное с использованием WCF и C #, его архитектура требует добавления KnownTypes через App.config. У меня сервисы идут так:
Клиент -> CentralServer -> DataServer (где -> соединение WCF)
Теперь я добавил KnownTypes и в CentralServer App.config, и в DataServer App.config следующим образом:
<add
type="Odra.Server.CentralServer.SBQL.AbstractSyntax.Declarations.Declaration,
Odra.Server.CentralServer.SBQL">
<knownType
type="Odra.Server.CentralServer.SBQL.AbstractSyntax.Declarations.MethodDeclaration,
Odra.Server.CentralServer.SBQL" />
</add>
Моя проблема заключается в том, что вызывающий метод whitch принимает аргумент типа MethodDeclaration на DataServer от CentralServer, генерирует исключение, что служба не может десериализовать этот параметр, хотя CentralServer МОЖЕТ его сериализовать (я знаю, потому что, когда я удаляю KnownType, я получаю исключение, что служба не может сериализации).
Кроме того, у меня есть множество таких методов, определенных одинаково, но принимающих разные типы в качестве аргумента, и они отлично работают.
У вас есть идеи, почему это (не) работает так?
Исключение:
The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://tempuri.org/:val.
The InnerException message was 'Element 'http://tempuri.org/:val' contains data of the 'http://schemas.datacontract.org/2004/07/Odra.Server.CentralServer.SBQL.AbstractSyntax.Declarations:MethodDeclaration' data contract. The deserializer has no knowledge of any type that maps to this contract.
Add the type corresponding to 'MethodDeclaration' to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding it to the list of known types passed to DataContractSerializer.'. Please see InnerException for more details.