Warum ist ServiceKnownType nicht für mein Objekt benötigt?
-
29-09-2019 - |
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;
// ...
}
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.