Fondamentalmente, in un servizio WCF, sei migliore quando lanci solo FaultException
(o FaultException<T>
).
Questo è dovuto a due cose: poiché WCF è progettato per essere interoperabile (il client potrebbe facilmente essere un'app non.NET), non si dovrebbero usare eccezioni .NET - quelle sono troppo specifiche della piattaforma. E due: se usi FaultExceptions (che sono tradotti in errori SOAP), il tuo canale (la connessione tra client e server) non verrà abbattuto o "guasto". Il runtime di WCF sul lato server considera tutte le eccezioni .NET non gestite come eccezioni "gravi" e quindi mette il canale in uno stato di errore, assumendo che qualcosa di veramente brutto sia successo.
Se il tuo canale è in errore, non puoi più utilizzarlo: dovrai chiudere il proxy client e ricrearlo da zero.
Se si vuole (o deve) essere molto interoperabile, definiresti il tuo errori SOAP sono colpa contratti (analogo ai contratti di dati) in un file separato, e poi ci si butta FaultException<T>
dove T sarebbe uno dei tuoi contratti di colpa. Se sei rigorosamente .NET su entrambi i lati, puoi anche aggiungere eccezioni .NET a FaultException come tipo generico T, se lo desideri, il canale non verrà criticato (ad esempio potresti lanciare uno FaultException<InvalidOperationException>
e quindi segnalare ciò che è andato sbagliato).
fonte
2009-10-05 13:52:05
Una grande spiegazione, vorrei poter invocare due volte. Grazie. – Noich