0
나는이 질문이 here 전에 물어 보았지만 여전히 무엇을 선택해야할지 모르겠다.외부 시스템에 서비스 공개 - 계약을 어떻게 디자인해야합니까?
내 서비스는 엔터프라이즈의 많은 3 자 시스템에서 호출됩니다. 서비스가 수집 할 정보 (MyBigClassWithAllInfo)는 제품 수명 기간 동안 변경 될 것입니다. 객체를 노출하는 것이 여전히 좋은 생각입니까?
이 기본적으로 무엇을 내 두 가지 대안이다 :
[ServiceContract]
public interface ICollectStuffService
{
[OperationContract]
SetDataResponseMsg SetData(SetDataRequestMsg dataRequestMsg);
}
// Alternative 1: Put all data inside a xml file
[DataContract]
public class SetDataRequestMsg
{
[DataMember]
public string Body { get; set; }
[DataMember]
public string OtherPropertiesThatMightBeHandy { get; set; } // ??
}
// Alternative 2: Expose the objects
[DataContract]
public class SetDataRequestMsg
{
[DataMember]
public Header Header { get; set; }
[DataMember]
public MyBigClassWithAllInfo ExposedObject { get; set; }
}
public class SetDataResponseMsg
{
[DataMember]
public ServiceError Error { get; set; }
}
XML 파일은 다음과 같이 보일 것이다 :
< XML 버전 = " 1.0 " 인코딩 = " UTF-8 "? > < 메시지 > < 헤더 > <InfoAboutTheSender> ... </InfoAboutTheSender > </헤더 > <StuffToCollectWithAllTheInfo> <stuff1> ... </stuff1 > </StuffToCollec tWithAllTheInfo > </메시지 >이 서비스를 구현하는 방법에 대한 어떤 생각?
감사 Larsi
단순히 함께 전송 될 수있는 변형 유형 목록을 가지고 메시지를 작성할 것까지 뭔가를 얻을 수있는 정보가 수명 동안 바꿀 것입니다하지만 당신은 총 미만인 경우
글쎄, 당신은 정확한 (절대에 대한) absoulutt있어. 나는 당신이 왜 변형 유형에 의한 것인지 잘 모르겠다. 일부 일반 field1, field2, field3을 messagetype 필드와 함께 사용할 것을 제안합니까? 현재 내 서비스는 약 30 개의 필드를 수집하며 성장할 것으로 예상됩니다. – Larsi
예. 따라서 여러분이 세상에 드러내는 것은 해시 맵과 비슷한 것입니다. 그런 다음 일단 열린 XML 구조체를 마샬링하면 전달되는 메시지 버전을 기반으로 필드, 유형 등을 확인할 수 있습니다. –
또한 http : // www에서 Udi Dahan의 서비스 및 계약 버전에 대한 게시물을 확인하십시오. .udidahan.com/2009/04/10/backwards-compatibility-versioning-problems-arenrsquot / – lasseeskildsen