2011-04-11 5 views
12

DataContract 중 하나에 DataMember을 추가하고 싶습니다. 당사자 중 하나가 업데이트되지 않은 경우 기존 서버 및 클라이언트가 새로운 DataMember이있는 상태에서 어떻게 작동하는지 알고 싶습니다.WCF의 기존 DataContract에 DataMember 추가

내가 거기에 기억은 DataMember은 선택 할 수있는 방법이지만, 모든 시나리오에서 일하는 것이 궁금 :

  • 업데이트 클라이언트 => 기존 서버
  • 된 클라이언트 => 업데이트 서버
  • 업데이트 클라이언트 < = 기존 서버
  • 이전 클라이언트 < = 업데이트 서버

답변

15

WCF는 인식하지 못하는 새 구성원을 정상적으로 처리합니다. 계약 소비자 (클라이언트 또는 서버 측)는 단순히 해당 멤버를 "보지"않으므로 새 멤버가 절대로 IsRequired=true 속성이어서는 안됩니다.

또한 WCF는 DataContract가 IExtensibleDataObject을 구현하는 동안 구성 요소간에 새 속성을 투명하게 연결합니다. EG는 메시지 경로가가는 경우 :

업데이트 클라이언트 => 기존 서버 => 업데이트 서버

다음 체인의 마지막에 업데이트 된 서버는 여전히 새로운 DataMember를 볼 수 있습니다. 그러나 "이전 서버"에서는 새 DataMember가 표시되지 않습니다.

이전 서버가 업데이트 된 클라이언트에 메시지를 보내면 새 클라이언트에서 비 직렬화시 새 DataMember가 default(type)으로 설정됩니다.

Best Practices for DataContract versioning here에 대한 자세한 내용입니다.

그리고이 기사는 the difference between Breaking and Non-Breaking changes에 대해 설명합니다.

+0

마지막으로 제공 한 링크에서 '대부분의 경우 데이터 회원을 추가 또는 삭제하는 것이 큰 변화가 아닙니다.' –