Eccezioni o codici di errore

12

Stiamo costruendo un servizio web (SOAP, .Net) che parlerebbe (principalmente) di client nativi (Windows, C ++) e ci chiediamo quale sia il modo migliore per comunicare errori al client (ad esempio SomethingBadHappened come login servizio non disponibile o qualcosa come l'utente non trovato) e non sono stati in grado di decidere tra lanciare un'eccezione al client o utilizzare un qualche tipo di modello di codice di errore per fare quanto sopra.

Che cosa preferiresti per la gestione sul lato client: ricevere un codice di errore o gestire un'eccezione ServerFault che contiene il motivo dell'errore?
1) Perché stiamo pensando un'eccezione: perché renderebbe il codice lato server molto più uniforme 2) Perché stiamo pensando ai codici di errore: perché pensiamo ha più senso dal punto di vista del cliente.

Se 2) è vero, probabilmente vorremmo cercare i codici di errore che le eccezioni? È questo il caso qui?

Inoltre, la risposta cambierebbe se stessimo parlando con i client gestiti invece dei client nativi?

    
posta Amit Wadhwa 01.11.2010 - 05:38
fonte

3 risposte

8

SOAP ha un concetto di errori , è possibile convertire un'eccezione in un errore sul lato server e su il proxy del client l'errore può nuovamente essere convertito in un'eccezione. Funziona molto bene nello stack metro WCF e Java, non può commentare su client C ++ nativi.

Per quanto riguarda la best practice SOA, definire un errore generico e alcuni errori specifici solo se il client ha bisogno di gestire un determinato tipo di errore in modo diverso. Non inviare mai una traccia dello stack di eccezioni al client nella distribuzione di produzione. Questo perché in teoria la traccia del server non ha alcun significato per il client e per motivi di sicurezza. Registrare l'errore completo e lo stacktrace sul server e inviare un riferimento univoco al log nell'errore. In WCF utilizzo il blocco Microsoft Exception Handling da Enterprise Library per generare un guid e anche convertire un'eccezione nell'errore SOAP.

Verifica le linee guida su Modelli e prassi Microsoft .

    
risposta data 01.11.2010 - 10:24
fonte
4

Recentemente ho fatto un servizio web con le librerie Java 6, che possono riportare un'eccezione al chiamante (non ho esaminato come viene eseguito automaticamente).

La possibilità che il client fornisca una traccia dello stack nel report degli errori allo sviluppatore è stata molto utile (contrariamente all'ottenere un timestamp approssimativo e quindi doverlo cercare nei log, se vi capita di loggarlo).

Quindi, visto dal punto di vista degli sviluppatori, usa Eccezioni.

    
risposta data 01.11.2010 - 07:41
fonte
-2

Se si tratta di un servizio Web, non è possibile causare esattamente il server per generare un'eccezione che verrà rilevata dal client. All'interfaccia, il tuo server deve sostanzialmente restituire una sorta di codice di errore, anche se è una stringa che dice An exception occurred. Type %s, message %s, stack trace %s .

Per quanto riguarda il lato client, è possibile che il codice di lettura della risposta controlli la risposta per vedere se contiene un errore e genera un'eccezione sul lato client. Questo è un ottimo modo per farlo, in lingue con una buona gestione delle eccezioni almeno. C ++, tuttavia, non ha una buona gestione delle eccezioni ed è una buona idea rimanere il più lontano possibile dalle eccezioni C ++. Se non è possibile utilizzare una lingua migliore, attenersi semplicemente ai codici di errore.

    
risposta data 01.11.2010 - 05:49
fonte

Leggi altre domande sui tag