Pergunta

O meu grupo é o desenvolvimento de um serviço baseado em (.NET WCF) e a aplicação que estamos tentando decidir como lidar com exceções em nossos serviços internos.Devemos lançar exceções?Exceções de devolução serializado em XML?Apenas retornar um código de erro?

Tenha em mente que o utilizador nunca irá visualizar essas exceções, é só para outras partes da aplicação.

Foi útil?

Solução

O WCF utiliza SoapFaults como a sua forma natural de transmissão de exceções a partir do serviço para o cliente, ou o cliente para o serviço.

Você pode declarar um costume de falha de SOAP usando o FaultContract atributo em sua interface de contrato:

Por exemplo:

[ServiceContract(Namespace="foobar")]
interface IContract
{
    [OperationContract]
    [FaultContract(typeof(CustomFault))]
    void DoSomething();
}


[DataContract(Namespace="Foobar")]
class CustomFault
{
    [DataMember]
    public string error;

    public CustomFault(string err)
    {
        error = err;
    }
}

class myService : IContract
{
    public void DoSomething()
    {
        throw new FaultException<CustomFault>( new CustomFault("Custom Exception!"));
    }
}

Outras dicas

Bem, por que não apenas jogar o padrão SOAPExceptions?O problema com os códigos de erro e XML serializado é que eles tanto necessitam de uma lógica adicional para reconhecer que um erro de fato acontecer.Tal abordagem é útil somente se você tiver o registo especializado ou lógica que precisa acontecer no outro lado do serviço da web.Um exemplo seria retornar uma bandeira que diz "it's ok para continuar" com um erro de exceção de relatório.

Independentemente de como você jogá-lo, ele não vai fazer o trabalho mais fácil, como o chamado lado ainda precisa reconhecer houve uma exceção e lidar com ele.

Eu estou um pouco confuso, eu não estou sendo leviano -- você diz que quer voltar exceções serialised como XML, por um lado, e que o utilizador nunca irá visualizar as exceções, por outro lado.Quem vai estar vendo essas exceções?

Normalmente eu diria para usar o WCF contratos de falha.

Phil, diferentes partes da aplicação chamar uns aos outros usando WCF.Por "exceções de devolução serializado em XML," eu quis dizer que o valor de retorno da função wold ser um objeto de exceção.O sucesso seria indicado por null.

Eu não acho que essa é a opção certa.

O WCF contratos de falha de som bom, mas eu não sei nada sobre eles.Verificação de google agora.

Eu gostaria de evitar o envio de exceções diretamente de volta para o cliente, a menos que você está bem com o que muito detalhe a ser enviada de volta.

Eu recomendaria o uso do WCF falhas para transmitir a sua mensagem de erro e o código (algo que pode ser usado para tomar uma decisão sobre o receptor para repetir, erro, etc.), dependendo se é o remetente ou receptor de culpa.

Isso pode ser feito usando FaultCode.CreateReceiverFaultCode e FaultCode.CreateSenderFaultCode.

Eu estou no processo de atravessar isso agora, mas deparou-se com um terrível obstáculo parece no WCF falha gerada SOAP 1.1 resposta.Se você estiver interessado, você pode verificar para fora minha pergunta sobre isso aqui:

.NET WCF falhas geração incorrecta SOAP 1.1 faultcode valores

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