WCF-Client-Probleme erkennen ServiceKnownTypes?

Wie würde ich sagen, dass der WCF-Dienst, was KnownTypes zu verwenden, wenn die Weitergabe der Daten an den client zurück?

Ich weiß, ich kann die [ServiceKnownType] - Attribut, das macht den service gut laufen, die von einem WCF Test-Server, aber es immer noch nicht aus dem client. Bin ich hier etwas fehlt?

[OperationContract]
[ServiceKnownType(typeof(SubClassA))]
[ServiceKnownType(typeof(SubClassB))]
BaseClassZ GetObject();

Fehlermeldung vom client:

{"Element
'http://schemas.datacontract.org/2004/07/BaseClassZ'
die Daten enthält, von einem Typ zuordnet
der name
'http://schemas.datacontract.org/2004/07/SubClassA'.
Der deserializer hat keine Kenntnis von
jede Art, die Karten zu diesem Namen.
Erwägen Sie die Verwendung einer DataContractResolver
oder fügen Sie dem Typ entsprechend
'SubClassA" in die Liste der bekannten Typen
- zum Beispiel, indem die KnownTypeAttribute-Attribut oder durch
hinzufügen zu der Liste der bekannten Typen
übergeben DataContractSerializer."}

Serialisieren/Deserialisieren das Objekt auf der WCF-server mit einem DataContractSerializer und eine Liste der KnownTypes funktioniert einwandfrei.

UPDATE: Es scheint, ich kann den client zum Lesen der Objekt richtig wenn ich KnownType-Attribute der Basisklasse, aber ich bin noch auf der Suche nach einem Weg, um dieses, wenn möglich, da die Basis-Klasse wird verwendet, für eine Menge von Elementen und das möchte ich nicht ändern, das KnownType-Attribute in der base-Klasse, immer wenn ich ein neues Element hinzufügen.

[DataContract]
[KnownType(typeof(SubClassA))]
[KnownType(typeof(SubClassB))]
public class BaseClassZ 
{
    ...
}
Ich sehe viel von der MSDN-Dokumentation und Beispiele, die Sie sicher machen es klingen wie sollte dies möglich sein, aber verdammt, wenn ich es bekommen kann, um zu arbeiten! Hinzufügen eines bounty...

InformationsquelleAutor Rachel | 2010-10-01

Schreibe einen Kommentar