2012-02-05 3 views
0

버전 간의 열거 변경에 대해이 post을 읽었지 만 도움이되지 않았습니다. 나는 다음과 같은 WCF 서비스가 : 만 서비스 측면에 새 열거 형 멤버, 을 추가하는 방법을 찾고 있어요열거 형을 사용하는 wcf 순방향 호환성

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
    MyEnum Foo(); 
} 

[DataContract] 
public enum MyEnum 
{ 
    [EnumMember] 
    first, 
    [EnumMember] 
    Second, 
} 

합니다. 클라이언트가 내가 추가하고자하는 새로운 enum 멤버없이 이전 버전의 프록시를 사용하고 있다고 가정 해 봅시다. 내 목표는 직렬화 예외를 피하는 것입니다. 클라이언트가이 상황을 처리 할 수있을 정도로 똑똑하고 새로운 값이나 다른 것을 무시하고 싶습니다. 어떤 아이디어?

답변

2

링크 된 질문의 대답에 따르면 새 요소를 열거 형에 추가해도 호환성이 손상되지 않습니다.

크래시가 열거 형 목록에 해당 값이없는 클라이언트에 열거 형 값을 보내는 중입니다.

은 서버 측을 변경하여이 문제를 해결하려면 다음

  • 이 새로운 서비스를 사용하는 오래된
  • 새로운 클라이언트와 동일한 않는 새로운 서비스 방법을 만들기 열거 형에 새 값을 추가
  • 이전 클라이언트는 이전 서비스를 사용합니다.
  • 이전 서비스에서는 결과가 전송되기 전에 새 enum 값 중 하나가 사용되고 있는지 확인하고 이전 enum 값 중 하나를 이전 서비스로 변경합니다 ("Uknown" 만약 요 u 값이 있습니다)

이것은 가치가있는 것보다 더 많은 작업 일 수 있습니다. 이는 얼마나 많은 클라이언트가 있고 어떻게 업데이트해야하는지에 따라 다릅니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 1. 내 문제는 이미 구 버전을 릴리스했고 열거 형에 '알 수 없음'값이 없으므로 새 값을 기본값으로 변경할 수 없습니다. 2. 마지막 점에서이 트릭이 WCF 동작이나 다른 곳에서 발생해야한다는 의미였습니까? 포인트 2에 대해서는 – Sean

+0

입니다. 코드에서 return 문 바로 앞에 있어야합니다. 포인트 1에 대해 기존 값으로 변경할 수 있습니까? 이전 클라이언트가 새로운 enum을 얻었다면 어떤 일이 일어나야하는지에 대한 비즈니스 규칙은 무엇입니까? –

+0

오래된 클라이언트가 새로운 열거 형을 얻는다면, 그것을 무시하거나 현재 가지고 있지 않은 기본값으로 바꾸고 싶을 것입니다. 그러나이 솔루션은 또 다른 문제점을 야기합니다. 새 클라이언트는 이전 서비스에는 작동하지 않습니다. 기존 서비스에는 존재하지 않는 '새 서비스'를 호출하지 못하기 때문입니다. – Sean