Domanda

E 'la mia comprensione che ogni tipo (a parte alcuni primitive come int e string) utilizzata in un bisogno WCF ServiceContract ad essere dichiarata con l'attributo ServiceKnownType. Ma, devo costruire un oggetto personalizzato e si trasmette dall'altra parte mia WCF servizio senza alcun problema - anche se non ho aggiunto una ServiceKnownType per esso. Qualcuno si prega di spiegare perché questo funziona?

[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;
// ...
}
È stato utile?

Soluzione

No, non è corretto. ServiceKnownType (o KnownTypeAttribute a contratto di dati) è necessaria solo per i tipi utilizzati dal servizio, ma non specificate nella definizione di operazione. Nel tuo caso è stato definito il funzionamento LoadMyObjects che utilizza classe MyObject. Perché l'operazione utilizza direttamente MyObject non devi aggiungere MyObject come ServicKnownType. Ma se si definisce MyObject2 derivato da MyObject non sarà in grado di inviare tale oggetto dal funzionamento LoadMyObjects fino dichiari MyObject2 come ServiceKnownType.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top