.net - ¿Cuál es la diferencia en WCF al usar KnownType y ServiceKnownType?
known-types (1)
Al final hacen lo mismo, pero en un ámbito diferente.
[ServiceKnownType]
define una jerarquía de clases para todos los métodos en este servicio, o un único método en el servicio (dependiendo de dónde coloque el atributo). Entonces, en este caso, esta jerarquía de tipos solo será válida y aplicable para este servicio o tal vez solo un único método en ese contrato de servicio.
[KnownType]
hace lo mismo, pero en los contratos de datos subyacentes. Cualquier servicio que utilizará este contrato de datos ahora también "heredará" todas las posibles clases descendientes, lo que podría ser o no lo que usted desea.
Entonces realmente, es solo cuestión de a qué ámbito desea aplicar una declaración determinada: ponerlo en el contrato de datos lo convierte en una especie de jerarquía de tipo "global", mientras que usar [ServiceKnownType]
permite definir algo que es válido solo para un contrato de servicio o incluso solo uno (o varios) métodos en ese contrato de servicio.
Tengo un servicio que devuelve un conjunto de animales, pero la lista puede contener gatos, perros, etc., que se extienden a los animales. Sé que necesito usar el atributo KnownType o ServiceKnownType, y en la clase de entidad o la clase de servicio, respectivamente.
¿Cuál es la diferencia entre los 2 atributos? Prefiero el ServiceKnownType porque se aplica en el servicio, exactamente donde es necesario y solicitado, a diferencia de KnownType que se aplica en mi entidad. Para mí, aplicarlo en la clase de entidad significa saber muy adelante cómo se está utilizando mi clase de entidad.
Por ahora lo tengo en mi entidad y funciona como un encanto, pero estoy buscando orientación aquí en cuanto a mejores prácticas y utilidad.