ServiceContract에서 중요한 변경 사항을 도입해야하는 경우, 이전 컨텍스트를 유지하고 새 컨텍스트를 작성하고 네임 스페이스에서 일부 버전 식별자를 사용하는 것이 가장 좋습니다. 나는이 상황을 제대로 이해한다면동일한 WCF 서비스에서 여러 버전의 ServiceContracts를 명명하는 방법은 무엇입니까?
, 나는 다음을 수행 할 수 있어야한다 :이
[ServiceContract(Namespace = "http://foo.com/2010/01/14")]
public interface IVersionedService
{
[OperationContract]
string WriteGreeting(Person person);
}
[ServiceContract(Name = "IVersionedService", Namespace = "http://foo.com/2010/02/21")]
public interface IVersionedService2
{
[OperationContract(Name = "WriteGreeting")]
Greeting WriteGreeting2(Person2 person);
}
내가 두 버전을 모두 지원하는 서비스를 만들 수 있습니다. 이것은 실제로 작동하며 soapUI에서 테스트 할 때 잘 보입니다.
그러나 "서비스 참조 추가"를 사용하여 Visual Studio에서 클라이언트를 만들면 VS는 네임 스페이스를 무시하고 단순히 같은 이름의 두 인터페이스를 봅니다. VS를 구분하기 위해 VS는 그 중 하나의 이름에 "1"을 추가합니다. 누군가가 최신 버전 인 볼 수 있도록 나는 프록시
ServiceReference.VersionedServiceClient
및
ServiceReference.VersionedService1Client
전화로 지금은 쉬운 일이 아닙니다 끝.
인터페이스에 다른 이름을 부여해야합니까? 예컨대
IVersionedService1
IVersionedService2
또는
IVersionedService/2010/01/14
IVersionedService/2010/02/21
이 네임 스페이스의 목적을 패배하지 않습니다?
다른 서비스 클래스에 넣고 각 버전마다 고유 한 URL을 가져야합니까?
감사합니다. 사실 둘 다 구현하기 위해 이전 인터페이스에서 새 인터페이스를 파생시킬 필요는 없습니다.내 서비스 않습니다 공용 클래스 VersionedService : IVersionedService, IVersionedService2 및 잘 작동합니다. 내 질문에 대한 자세한 내용은 이미 버전이 지정된 XML 네임 스페이스를 사용할 때 인터페이스에 증분 된 숫자를 추가해야합니까? 당신의 대답은 내가해야한다고 암시하는 것 같습니다. –
@Tor : 아니요, 꼭 그런 것은 아닙니다. 이전 인터페이스와 새로운 인터페이스가 두 개의 별도 XML 네임 스페이스에 있고 두 개의 별도 엔드 포인트 (두 개의 URL)에 노출되어있는 경우 클라이언트는 항상 한쪽 또는 다른 쪽을 선택하며 명명에 충돌이 없습니다. 생각한다. –