문제

최근에 WCF의 WebHTTPBinding 사용법에 대해 읽기 시작했고 휴식 서비스를 소비 할 수 있었지만 지금이 서비스를 조금만 살펴 보았습니다.

주어진 API에 단일 요청을하는 서비스를 작성하지만 많은 응답 중 하나를 반환 할 수 있습니다.

예를 들어, 일반적인 응답 :

<ActualResponse>
<ResponseItem>
    <Name />
    <Area />
</ResponseItem>
</ActualResponse>

그러나 나가는 요청에 대해 유효하지 않거나 응답 서비스 자체가 어떤 종류의 문제를 겪고 있다면 반환 응답은 다음과 같습니다.

<ErrorResponse>
    <Message />
</ErrorResponse>

Pedram Rezaei는 훌륭한 게시물을 가지고있었습니다 휴식 서비스를 소비합니다, 여기서 내 정보의 대부분을 빌려주는 곳입니다. 내가 말할 수있는 바에 따르면, 객체에 직렬화 가능한 속성이 정의 된 한 객체를 만들 수 있습니다. 문제는 클래스를 만들어야 할 조건이 없습니다 (ErrorResponse/realResponse).

초기 요청을 보내고 사막화가 발생할 수 없거나 더 우아한 접근법이있는 경우 오류를 포착하는 일종의 TryParse 기능을보고 있어야하는지 잘 모르겠습니다.

나는 WCF 세계에 상당히 새로운 것이므로 가능성이 존재합니다.

도움이 되었습니까?

해결책

나는 당신이 비누에서 약간의 연습을 빌릴 수 있다고 생각합니다.

<soap:Envelope>
    <soap:Body>
        ... message contents
    </soap:Body>
</soap:Envelope> 

나는 당신이 비누를 사용한다고 제안하지 않고 비누로 사용한 디자인에서 배우는 것을 제안합니다. 비누가 신체 내에서 성공적으로 (또는 당신의 말로 "실제") 응답을 포함시키는 것은 또는 반환 a 비누 : 결함 몸 안에.

비누의 성공은 다음과 같습니다.

<soap:Envelope>
    <soap:Body>
        <ActualResponse>... </ActualResponse>
    </soap:Body>
</soap:Envelope> 

결함은 다음과 같이 보일 수 있습니다.

<soap:Envelope>
    <soap:Body>
        <soap:Fault>... </soap:Fault>
    </soap:Body>
</soap:Envelope> 

귀하의 경우에는 다음과 같습니다.

<ServiceResponse> 
     <ActualResponse> ... </ActualResponse>
</ServiceResponse> 

또는

<ServiceResponse> 
     <Fault> ... </Fault>
</ServiceResponse> 

그리고 XML 직렬화는 정말 좋습니다. . .

그러나 봉투를 제어 할 수없는 것 같습니다. 사실은 여러 가지 다른 응답을 얻을 수 있다는 것입니다. 이를 처리하기 위해, 당신은 고려 된 XML 봉투에서받은 실제 응답을 랩핑하고 결과를 손상시킬 수 있습니다. 저것.

당신이 얻는다면u003CActualResponse> ...u003C/ActualResponse> , 사로화 가능한 봉투로 싸서 같은 것을 얻으십시오.u003CServiceResponse>u003CActualResponse> ...u003C/ActualResponse>u003C/ServiceResponse> 그런 다음 사라집니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top