Подтвердить что ты не робот

В чем разница в WCF при использовании KnownType и ServiceKnownType?

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

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

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

4b9b3361

Ответ 1

Они делают то же самое, в конечном счете - но в разной области.

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

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

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