Question

Je crois comprendre que tous les types (autres que certaines primitives comme int et string) utilisé dans un besoin WCF ServiceContract à déclarer avec attribut ServiceKnownType. Mais, je construire un objet personnalisé et il est transmis accross mon service WCF sans problème - même si je ne l'ai pas ajouté de ServiceKnownType pour elle. Est-ce que quelqu'un s'il vous plaît expliquer pourquoi cela fonctionne?

[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;
// ...
}
Était-ce utile?

La solution

Non, ce n'est pas correct. ServiceKnownType (ou KnownTypeAttribute sur le contrat de données) est nécessaire uniquement pour les types utilisés par le service mais non spécifié dans la définition de l'opération. Dans votre cas, vous avez défini le fonctionnement de LoadMyObjects qui utilise la classe MyObject. Parce que l'opération utilise directement MyObject vous ne devez pas ajouter MyObject comme ServicKnownType. Mais si vous définissez MyObject2 dérivé de MyObject vous ne serez pas en mesure d'envoyer l'objet de l'opération de LoadMyObjects jusqu'à ce que vous déclarez MyObject2 que ServiceKnownType.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top