2010-09-07 5 views
0

Cela peut sembler une question stupide, mais je n'arrive pas à trouver une réponse évidente. Je dois rapidement créer un service WCF simple et j'ai créé toutes les classes dont j'ai besoin décoré avec les attributs DataContract et DataMember et j'ai créé une classe d'exception personnalisée et tout fonctionne. Cependant, si une exception est levée dans mon service, peu importe ce que je devrais faire, je jette toujours mon FaultException<MyException> avec un message détaillé ou j'utilise différents types d'exceptions. Je suppose que je lance toujours cette exception que le client peut gérer ce type d'exception unique.Gestion des erreurs et des paramètres incorrects dans un service wcf

Aussi, si le client me passe un objet complètement nul, alors je réalise qu'il est normal de lancer une exception, mais que se passe-t-il si un membre de cette classe n'est pas comme prévu ou même une chaîne vide? Serais-je encore jeter mon exception avec cela comme raison ou est-ce que je retournerais juste un message dans mon objet de réponse? Je sais que cela peut sembler une question stupide, mais juste préoccupé par le fait que je pourrais utiliser des exceptions pour conduire la fonctionnalité, mais je pense que jeter une exeption a du sens.

Merci beaucoup

Paul

Répondre

2

WCF prend en charge "deux types" d'exceptions. La première est une exception inattendue: chaque exception .NET courante générée à partir de votre code, chaque exception non gérée et chaque erreur FaultException non générique sont traitées comme des exceptions inattendues. Une exception inattendue est SOAP: Fault qui n'est pas décrite dans WSDL. Une exception inattendue bloque le canal.

Le deuxième type est des exceptions attendues. Les exceptions attendues sont définies en tant que FaultContracts. Vous lancez l'exception attendue en exportant FaultException générique. Les exceptions attendues sont décrites dans WSDL sous la forme wsdl: messages d'erreur pour les opérations. Le contrat d'erreur est ajouté en tant que type XSD pour l'exception attendue. En raison de ce client peut analyser Détail de SOAP: Fault et le fournir en tant qu'objet fortement typé. Vous pouvez fournir des informations sur l'exception dans le contrat de panne - c'est juste sur vous quelles informations fournissez-vous à un client. Lorsque vous codez votre service, vous devez différer ce qui est attendu exception et ce qui ne l'est pas. Par exemple lorsque vous créez une opération GetDataById, l'exception attendue est DataNotFound ou IncorrectIdFormat, etc. La validation des données est donc une exception attendue et vous pouvez dire à votre utilisateur quel champ a une valeur incorrecte. Vous pouvez également avoir une exception générale attendue pour envelopper d'autres problèmes inattendus - cette exception doit généralement être utilisée dans l'implémentation IErrorHandler en tant que gestionnaire d'exception global. Si vous n'utilisez pas le gestionnaire d'exception global, vous ne devez pas gérer les exceptions inattendues.

+0

Un grand merci pour votre réponse. J'ai implémenté un IErrorHandler et c'est logique maintenant. –