2010-03-16 5 views
21

Ho un servizio che restituisce una schiera di animali ma l'elenco può contenere gatti, cani, ecc. Che estendono tutti gli animali. So che ho bisogno di utilizzare l'attributo KnownType o ServiceKnownType e rispettivamente sulla classe di entità o sulla classe di servizio.Qual è la differenza in WCF quando si utilizzano KnownType e ServiceKnownType?

Qual è la differenza tra i 2 attributi? Preferisco ServiceKnownType perché è applicato al servizio, esattamente dove è necessario e richiesto, al contrario di KnownType che viene applicato sulla mia entità. Per me applicarlo alla classe di entità significa sapere troppo avanti come viene utilizzata la mia classe di entità.

Per ora l'ho sulla mia entità e funziona come un incantesimo, ma sto cercando una guida qui per le migliori pratiche e l'utilità.

risposta

39

Fanno la stessa cosa, in definitiva - ma su un campo di applicazione diverso.

[ServiceKnownType] definisce una gerarchia di classi per tutti i metodi su questo servizio o un singolo metodo sul servizio (a seconda di dove si inserisce l'attributo). Quindi, in questo caso, questa gerarchia di tipi sarà valida e applicabile per questo servizio o forse anche solo un singolo metodo in quel contratto di servizio.

[KnownType] fa la stessa cosa, ma sui contratti dati sottostanti. Qualsiasi servizio che utilizzerà questo contratto di dati ora "eredita" anche tutte quelle potenziali classi discendenti, che potrebbero o meno essere ciò che si desidera.

Quindi, è solo questione dell'ambito di applicazione per cui si desidera applicare una determinata dichiarazione. Inserirla nel contratto dati lo rende un tipo di ricerca "globale", mentre l'utilizzo di [ServiceKnownType] consente di definire qualcosa di valido solo per un contratto di servizio o anche solo uno (o più) metodi su quel contratto di servizio.

+0

Grazie. Questo è quello che stavo pensando e ho intenzione di metterlo a livello di contratto operativo. –

+0

BTW - la ragione per cui ho contrassegnato la risposta di Matt come accettata è a causa del link che fornisce che vi entra in profondità. Ad ogni modo mi piace la tua risposta, lo dice in parole povere. –

+0

Sembra che l'altra risposta sia stata cancellata .... –

Problemi correlati