WCF - Gestion des exceptions
Un développeur de services WCF peut rencontrer des erreurs imprévues qui nécessitent un rapport au client d'une manière appropriée. Ces erreurs, appeléesexceptions, sont normalement gérés à l'aide de blocs try / catch, mais encore une fois, c'est très spécifique à la technologie.
Étant donné que la zone de préoccupation d'un client ne concerne pas la façon dont une erreur s'est produite ou les facteurs contribuant à une erreur, le contrat SOAP Fault est utilisé pour communiquer le message d'erreur du service au client dans WCF.
Un contrat Fault permet au client d'avoir une vue documentée des erreurs survenues dans un service. L'exemple suivant donne une meilleure compréhension.
Step 1 - Un service de calcul simple est créé avec une opération de division qui générera des exceptions générales.
using System;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Runtime.Serialization;
usingSystem.ServiceModel;
usingSystem.Text;
namespace Calculator {
// NOTE: You can use the "Rename" command on the "Refactor" menu to change
// the interface name "IService1" in both code and config file together.
[ServiceContract]
public interface IService1 {
[OperationContract]
int divide(int num1, int num2);
// TODO: Add your service operations here
}
}
Le codage du fichier de classe est indiqué ci-dessous -
Maintenant, lorsque nous essayons de diviser le nombre 10 par zéro, le service de calcul lèvera une exception.
L'exception peut être gérée par le bloc try / catch.
Maintenant, lorsque nous essayons de diviser un nombre entier par 0, il retournera la valeur 10 car nous l'avons traité dans le bloc catch.
Step 2 - FaultException est utilisé dans cette étape pour communiquer les informations d'exception au client à partir du service.
public int Divide(int num1, int num2) {
//Do something
throw new FaultException("Error while dividing number");
}
Step 3- Il est également possible de créer un type personnalisé pour envoyer le message d'erreur à l'aide de FaultContract. Les étapes essentielles pour créer un type personnalisé sont mentionnées ci-dessous -
Un type est défini par l'utilisation d'un contrat de données et les champs destinés à être renvoyés sont spécifiés.
L'opération de service est décorée par l'attribut FaultContract. Le nom du type est également spécifié.
Une instance de service est créée pour déclencher des exceptions et des propriétés d'exception personnalisées sont attribuées.