2010-03-16 3 views
21

나는 동물 배열을 반환하는 서비스를 가지고 있지만 목록에는 고양이, 개 등이 포함될 수있다. KnownType 또는 ServiceKnownType 특성과 엔터티 클래스 또는 서비스 클래스 중 하나를 사용해야한다는 것을 알고 있습니다.KnownType 및 ServiceKnownType을 사용할 때 WCF의 차이점은 무엇입니까?

2 가지 속성의 차이점은 무엇입니까? 내 서비스 엔티티에 적용되는 KnownType과 반대로 ServiceKnownType이 서비스에 적용되고 정확히 어디에 필요하고 호출되는지 ServiceKnownType을 선호합니다. 나에게 엔티티 클래스에 그것을 적용한다는 것은 엔티티 클래스가 어떻게 사용되고 있는지 미리 알 수 없다는 것을 의미합니다.

당분간 나는 그것을 내 조직에 가지고 있으며 매력처럼 작동하지만, 모범 사례와 유용성에 대한 지침을 찾고 있습니다.

답변

39

그들은 같은 일을하지만 궁극적으로는 다른 범위에 있습니다.

[ServiceKnownType]은이 서비스의 모든 메소드에 대한 클래스 계층 구조 또는 서비스에 대한 단일 메소드 (속성 배치 위치에 따라 다름)를 정의합니다. 따라서이 경우이 유형 계층 구조는이 서비스에 대해서만 유효하거나 적용될 수 있으며, 심지어는 해당 서비스 계약의 단일 메소드 일 수도 있습니다.

[KnownType]은 기본 데이터 계약에서와 동일한 작업을 수행합니다. 이 데이터 계약을 사용할 모든 서비스는 이제 잠재적 인 자손 클래스를 "상속"합니다. 이는 원하는 것일 수도 있고 아닐 수도 있습니다.

그래서 정말 - 그것은 당신이 주어진 선언을 적용 할 어떤 범위의 단지 문제 - 데이터 계약을 넣어 일종의는 "글로벌"타입의 관계의 계층의를 만들고, [ServiceKnownType]를 사용하여 유효한 뭔가를 정의 할 수 있습니다 동안 하나의 서비스 계약 또는 해당 서비스 계약의 단 하나 (또는 ​​여러 개의) 방법에 대해서만 적용됩니다.

+0

감사합니다. 그것이 내가 생각한 것이고 나는 그것을 운영 계약 수준에 놓을 것입니다. –

+0

BTW - 매트의 대답을 받아 들인 이유는 내가 제공 한 링크가 더 깊이 들어가기 때문입니다. 나는 당신의 대답을 좋아합니다 - 그것은 적은 단어로 그것을 말합니다. –

+0

다른 답변이 삭제 된 것처럼 보입니다 .... –

관련 문제