Frage

Es ist mein Verständnis, dass jede Art (außer einigen Primitiven, wie int und string) in einer Notwendigkeit WCF Servicecontract verwendet mit ServiceKnownType Attribute deklariert werden. Aber habe ich ein benutzerdefiniertes Objekt erstellen und es übertragen wird accross meine WCF-Dienst ohne Probleme - obwohl ich kein ServiceKnownType für sie hinzugefügt haben. Will jemand bitte erklären, warum das funktioniert?

[ServiceContract(CallbackContract = typeof(IMyServiceCallback))]
public interface IMyService
{
    [OperationContract]
    List<MyObject> LoadMyObjects();
}

[DataContract]
public class MyObject
{
    [DataMember]
    private int batchID;
    [DataMember]
    private int fileID;
    [DataMember]
    private string fileName;
    [DataMember]
    private DateTime importStartTime;
// ...
}
War es hilfreich?

Lösung

Nein ist es nicht richtig. ServiceKnownType (oder Knowntype auf Datenvertrag) wird nur für die Typen vom Dienst verwendeten benötigt, aber nicht in Betrieb Definition angegeben. In Ihrem Fall haben Sie LoadMyObjects Betrieb definiert, die MyObject-Klasse verwendet. Da der Betrieb direkt MyObject verwendet, Sie müssen nicht MyObject als ServicKnownType hinzufügen. Aber wenn Sie MyObject2 definieren von MyObject abgeleitet werden Sie nicht in der Lage, das Objekt von LoadMyObjects Betrieb zu senden, bis Sie MyObject2 als ServiceKnownType erklären.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top