Каково различие в WCF при использовании KnownType и ServiceKnownType?

У меня есть сервис, который возвращает массив животного, но список может содержать кошек, собак, и т.д., который все расширяют животное. Я знаю, что должен использовать или атрибут KnownType или ServiceKnownType, и на классе объекта или классе обслуживания, соответственно.

Каково различие между 2 атрибутами? Я предпочитаю ServiceKnownType, потому что он применяется на сервис, точно где он необходим и требуется, в противоположность KnownType, который применяется на мой объект. Мне применяющий его на класс объекта означает знать слишком далеко впереди, как мой класс объекта используется.

На данный момент у меня есть он на моем объекте, и это работает как очарование, но я ищу руководство здесь относительно лучших практик и полноценности.

24
задан 3 revs, 2 users 80% 23 June 2012 в 19:23
поделиться

1 ответ

В конечном итоге они делают то же самое, но в другом объеме.

[ServiceKnownType] определяет иерархию классов для всех методов в этой службе или для одного метода в службе (в зависимости от того, где вы поместили атрибут). Таким образом, в этом случае эта иерархия типов будет действительна и применима только для этой службы или, возможно, даже для одного метода в этом контракте службы.

[KnownType] делает то же самое, но с базовыми контрактами данных. Любая служба, которая будет использовать этот контракт данных, теперь также «наследует» все эти потенциальные классы-потомки - которые могут быть, а могут и не быть тем, что вы хотите.

На самом деле - это просто вопрос того, к какой области вы хотите применить данное объявление - включение его в контракт данных делает его своего рода «глобальным» типом иерархии, при использовании [ServiceKnownType] позволяет вам определить что-то, что действительно только для одного контракта службы или даже только для одного (или нескольких) методов в этом контракте службы.

41
ответ дан 28 November 2019 в 23:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: