2010-08-19 18 views
1

Je crois comprendre que tous les types (autres que certaines primitives comme int et string) utilisés dans un contrat de service WCF doivent être déclarés avec l'attribut ServiceKnownType. Mais, j'ai construit un objet personnalisé et il est transmis à travers mon service WCF sans problème - même si je n'ai pas ajouté un ServiceKnownType pour cela. Quelqu'un peut-il expliquer pourquoi cela fonctionne?Pourquoi ServiceKnownType n'est-il pas nécessaire pour mon objet?

[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; 
// ... 
} 

Répondre

7

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és dans la définition d'opération. Dans votre cas, vous avez défini l'opération LoadMyObjects qui utilise la classe MyObject. Étant donné que l'opération utilise directement MyObject, vous n'avez pas besoin d'ajouter MyObject en tant que ServicKnownType. Mais si vous définissez MyObject2 dérivé de MyObject, vous ne pourrez pas envoyer cet objet depuis l'opération LoadMyObjects jusqu'à ce que vous déclariez MyObject2 en tant que ServiceKnownType.

+0

Merci. Est-ce que cela a toujours été vrai ou est-ce un changement récent à la WCF? Je suppose que je n'ai jamais réalisé. – TheSean

+0

Oui, cela est vrai depuis la première version de WCF. –