Pergunta

Eu comecei lendo recentemente sobre o uso WebHttpBinding em WCF e ser capaz de consumir serviços REST, no entanto, eu estive perplexo em um presente para um pouco agora.

Eu estou escrevendo um serviço que faz um único pedido para um determinado api, no entanto, pode retornar uma das muitas respostas.

Por exemplo, a resposta genérica:

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

No entanto, se algo eram inválidos na solicitação de saída ou o serviço de responder em si foi enfrentando algum tipo de problema de uma resposta retornando seria:

<ErrorResponse>
    <Message />
</ErrorResponse>

Pedram Rezaei tinha um ótimo post sobre consumo de serviços REST , que é onde eu emprestar maior parte da minha informação de. Do que eu posso dizer, podemos criar um objeto, desde que o objeto tem atributos serializáveis ??definidos. O ser questão, não há nenhuma condição a que classe a ser criado (ErrorResponse / ActualResponse).

Eu não tenho certeza se eu deveria estar olhando para algum tipo de funcionalidade TryParse que envia o pedido inicial e pega o erro se não desserialização pode ocorrer ou se há uma abordagem mais elegante.

Eu sou bastante novo para o mundo do WCF, então existe a possibilidade de que eu possa ser inteiramente com vista para alguma coisa!

Foi útil?

Solução

Eu acho que você pode pedir emprestado de alguma prática de SOAP, que tem uma hierarquia assim:

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

Eu não estou sugerindo que você usa SOAP, eu estou sugerindo que você aprender com o design empregado por SOAP. O SABÃO faz é incorporar a resposta bem sucedida (ou, em suas palavras "real") dentro do corpo, ou retornar um soap: Fault dentro do corpo.

um sucesso no sabão pode ter esta aparência:

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

enquanto uma falha pode ter esta aparência:

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

No seu caso, você pode ter o seguinte:

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

ou

<ServiceResponse> 
     <Fault> ... </Fault>
</ServiceResponse> 
Serialização

E XML é realmente bom nisso. . .

Mas parece que você não tem controle sobre o envelope. O fato é que você pode obter várias respostas diferentes. Para lidar com isso, você poderia envolver a resposta real recebido em um envelope XML artificial, e anular o resultado de que .

Se você receber ... , envolvê-la em um envelope deserializable para obter algo como ... , em seguida, desserializar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top