2014-02-05 3 views
0

개선 할 수 있다고 생각되는 다음 WCF 서비스가 있습니다. SOAP1.1 및 SOAP1.2를 사용하여 Windows 및 비 Windows 클라이언트를 지원할 수 있어야합니다.WCF 서비스 및 상호 운용성

API InitDataRequest의 입력 매개 변수 initdata와 GetData의 return 매개 변수에 대한 우려 사항이 있습니다. 현재 우리는 이러한 매개 변수가 XML 형식의 문자열로 제한되며 클라이언트와 서버는 각각의 환경에서 직렬화/직렬화를 담당한다는 개발 정책을 가지고 있습니다.

[ServiceContract] 
public interface IAtomDataInterfaceWcf 
{ 
    [OperationContract] 
    Guid OpenSession(AtomSessionType sessiontype); 

    [OperationContract] 
    void CloseSession(Guid sessionid); 

    [OperationContract] 
    int InitDataRequest(Guid sessionid, string initdata); 

    [OperationContract] 
    string GetData(Guid sessionid, int count); 
} 

SoapUI를 사용하면 InitDataRequest에 대한 SOAP 요청은 매개 변수 'initdata'에 대해 다음 요소를 표시합니다.

<tem:initdata>?</tem:initdata> 

이렇게하면 IBM Websphere 개발자가 다른 것을 기대하게되었습니다. 그들은 어떤 지침도없이 API를 설명하기 위해 XSD를 사용하여 이러한 매개 변수에 더 많은 구조를 제공한다고 제안했지만 API 사용법에 대해 머리를 터지게하지 못했습니다.

아이디어가 있으십니까?

미리 감사드립니다.

답변

2

서비스 계약에 대한 본질적 상호 운용성이 없습니다. 연락 담당자가 해결해야 할 비즈니스 이유를 지원하지 않는 한 개선의 여지가 있다고 생각하는 이유가 확실하지 않습니다.

basicHttpBinding 및 wsHttpBinding 각각에 대한 끝점을 각각 정의하여 비누 1.1 및 1.2를 통해 서비스를 노출 할 수 있습니다.

난 당신이 무슨 뜻인지 모르겠어요

를 우리가 그 매개 변수 될 XML 형식의 문자열

비누가 XML 표준에 구속되어있는 개발 정책을 가지고, 모든 비 xml 내용은 형식화되어야합니다. 그렇지 않으면 잘못된 xml로 끝납니다. 이것은 기술 제약만큼 개발 정책이 아닙니다.

soapUI에서 처음에 문자열 값 initdata을 물음표로 설정하면 어떤 문제인지 이해할 수 없습니다. 이것이 어떤 식 으로든 유효한 문자열이 아닌가 걱정됩니까? 당신은 soapUI가 "?" 처음에는 당신이 원하는대로 그것을 바꿀 수 있습니까?

마지막으로 서비스 소비자가 xsd가 필요하다고 말하면 host a WSDL endpoint 수 있으며 그 끝점으로 가서 xsd를 다운로드 할 수 있습니다.

1

위에서 설명한 내 문제에 대한 해답은 KnownType 특성의 올바른 사용법입니다. 그것을 사용하는 날과 같이 내 인터페이스를 재 작성 할 수 있습니다 : AtomDataResponse 및 AtomDataRequest는 다음과 같은 구조를 가지고

[ServiceContract] 
public interface IAtomDataInterfaceWcf 
{ 
    [OperationContract] 
    int InitDataRequest(Guid sessionid, AtomDataRequest initdata); 

    [OperationContract] 
    Guid OpenSession(AtomSessionType sessiontype); 

    [OperationContract] 
    void CloseSession(Guid sessionid); 

    [OperationContract] 
    AtomDataResponse GetData(Guid sessionid, int count); 
} 

.

[KnownType("GetKnownTypes")] 
[DataContract] 
public class AtomDataRequest 
{ 
    public static Type[] GetKnownTypes() 
    { 
     // load known types derived from AtomDataRequest and return as Type array 
    } 
} 

이러한 변경 후 내 WSDL은 이제 소비자가 대신 XML 포맷 스트링의 잘 정의 된 객체와 API 년대를 호출 할 수있는 다양한 문서입니다.