Pergunta

Estou confuso sobre como devo retornar erros a um cliente usando sabão.

Eu tenho um serviço WCF, mas não tenho certeza de qual tecnologia o cliente está usando, então eu gostaria de manter a especificação de sabão.

Até onde eu li, as mensagens de falha parecem ser a melhor maneira de lidar com isso.

Eu posso ver meu serviço com muitas falhas possíveis diferentes:

  • NULL erros de dados esperados
  • Erros de formato de dados (ou seja: db permite apenas 3 chars)
  • Erros de intervalo de dados "o cliente já existe", "incapaz de processar sua solicitação" Erros do tipo

Seria apropriado criar um novo objeto para cada uma dessas falhas e jogar como tal:

FaultException<NullFault>(nf);  
FaultException<InvalidDataFault>(idf);  
FaultException<ArguementFault>(af);  
FaultException<RangeFault>(rf);  

O cliente está passando em grandes objetos com muitas propriedades para praticamente todos os métodos (ou seja: cliente, pedido etc.).

Essa seria a maneira correta de lidar com erros e enviar de volta para o cliente?

Parece fora do lugar ter que adicionar cada falha aos atributos acima do método.

Ou seja:

[OperationContract]  
[FaultContract(typeof(NullFault))]  
[FaultContract(typeof(InvalidDataFault))]  
[FaultContract(typeof(ArguementFault))]  
[FaultContract(typeof(RangeFault))]  
void CreateCustomer(Customer customer);  

Além disso, que tal um GenicFault? Como você lidaria com erros de regra de negócios? IE: O cliente já existe, muitos itens de linha, não enviam para essa área, método de pagamento não aceito etc.?

Informe -me se esse método é adequado ou se houver outra solução aceita e como você lidaria com a situação da 'regra de negócios'.

Foi útil?

Solução

Retornar uma falha é a maneira correta de fazê -lo em geral, mas você também deve se perguntar o que o programa do cliente fará com as informações que você retornará em uma falha. Se o cliente precisar saber apenas que uma falha aconteceu, tudo o que você precisa é de uma única falha. Essa falha pode incluir o texto da mensagem que o cliente pode exibir para seu usuário.

Se o cliente precisar tomar uma ação diferente com base em ser um NullFault ou um RangeFault, é aí que você precisa de falhas separadas. Mas se não houver diferença entre um e outro, salve a si mesmo e o cliente programa algum tempo e esforço e definir apenas uma única falha.

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