2009-11-10 4 views
0

WCF를 사용할 수 있는지 궁금한데요, 연결의 양측에있는 DataContracts가 정확히 같아야합니다. 그렇지 않은 경우 연결할 때 예외를 throw하십시오.).WCF : 양쪽 모두 동등한 DataContracts 적용

예를 들어,이 서비스를 상상 :

[DataContract] 
enum State 
{ 
    [EnumMember] 
    Red, 
    [EnumMember] 
    Yellow, 
    [EnumMember] 
    Green 
} 

[ServiceContract] 
interface MyService 
{ 
    [OperationContract] 
    void SetState(State newState); 
} 

이제 서비스가 업데이트 상상 지금, "오렌지"새로운 국가를 지원합니다. 클라이언트는 여전히 위와 같이 DataContract를가집니다.

이제 클라이언트와 서비스가 동일한 DataContract를 사용하지 않기 때문에 클라이언트에서 서비스로의 모든 호출을에서 실패하려고합니다. 이것이 가능한가?

미리 도움을 청하십시오!

+0

나는 이것이 가능하지 않습니다. –

+0

그건 유감이야. 당신의 대답에 감사드립니다. 호환성을 보장하기 위해이 경우에는 추악한 해결 방법을 찾아야 할 것 같습니다. – Jan

답변

2

글쎄, 당신은 정말 모두에 대해 그렇게 많이 할 수 없습니다 -하지만 당신은 버전 XML 네임 스페이스와 데이터 계약 수 - 이런 걸 :

[DataContract(Namespace="http://data.yourcompany.com/DataSchema/2009/11")] 
enum State 
{ 
    [EnumMember] 
    Red, 
    [EnumMember] 
    Yellow, 
    [EnumMember] 
    Green 
} 

지금이 데이터 계약을 사용하여 클라이언트 -로 XML 네임 스페이스. 당신이 다음 달 서버에서 데이터 계약을 변경하는 경우

, 당신은에 XML 네임 스페이스를 변경할 수 있습니다 :

[DataContract(Namespace="http://data.yourcompany.com/DataSchema/2009/12")] 
enum State 
{ 
.... 
} 

당신은 "/ 11분의 2,009"데이터 계약을 사용 만 모든 서비스 엔드 포인트를 은퇴하는 경우 새 데이터 계약을 사용하여 새 끝점을 만들면 클라이언트는 두 개의 DataContracts의 XML 네임 스페이스가 일치하지 않으므로 더 이상 서비스 메서드를 더 이상 성공적으로 호출 할 수 없습니다.

어쩌면 그럴 수 있겠습니까?

마크

+0

좋은 해결책처럼 들리지만, 감사합니다! – Jan

관련 문제