IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Discussion :

Gestion globale des erreurs


Sujet :

Services Web

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 38
    Points : 37
    Points
    37
    Par défaut Gestion globale des erreurs
    Bonjour,

    Je développe un service Web qui se connecte à une base de données.
    Je voudrai que pour chaque exception levée côté serveur, faire un INSERT dans une table de log.
    La seule solution que j'ai trouvé, c'est de mettre un try{} catch{} dans chaque Webmethod, pour appeler une fonction qui créera la ligne de log.

    Connaissez-vous une autre moyen de centraliser la gestion des erreurs pour éviter de faire un try{} catch{} dans chaque webmethod ?

    Merci pour vos conseils !
    Hubert.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Avec WCF, t'as l'interface IErrorHandler que tu implémentes dans ton service et cela te permet de centraliser la gestion des erreurs. Pour les services ASMX, je ne pense pas qu'il en existe. Sinon rien ne t'empêche de le faire dans le fichier Global.asax qui contient le gestionnaire d'évènement Application_Error qui catchera les exceptions de ton application.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 38
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    Avec WCF, t'as l'interface IErrorHandler que tu implémentes dans ton service et cela te permet de centraliser la gestion des erreurs. Pour les services ASMX, je ne pense pas qu'il en existe. Sinon rien ne t'empêche de le faire dans le fichier Global.asax qui contient le gestionnaire d'évènement Application_Error qui catchera les exceptions de ton application.
    Bonjour et merci pour ta réponse.

    Ce n'est pas un WebService WCF mais ASMX.
    Comme je débute et que je ne connais pas WCF, je me vois mal convertir mon projet
    Concernant le gestionnaire d’évènements Application_Error, c'est ce que j'ai essayé d'implémenter en premier. Ça fonctionne avec un "simple" site internet, mais pas avec un WebService. Voir ici :
    Une application Web peut comprendre plusieurs services Web. Toutefois, l'événement Application_Error dans le fichier de syntaxe Global.asax ne peut pas être utilisé pour la gestion globale des exceptions.
    Finalement j'ai trouvé une solution avec un peu de POO et une classe abstraite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    // Réponse d'une WebMethod (Classe abstraite)
    public abstract class Response
    {
      public bool Success;
      public String Message;
      // Constructeur qui lance l'éxecution
      public Response()
      {
        try
        {
          Invoke();
        }
        catch (Exception ex)
        {
          // Traitemente des erreurs
        }
      }
      // Méthode abstraite à implémenter dans les classes dérivées
      protected abstract void Invoke();
    }
     
    // Réponse de la fonction A
    public class ResponseFonctionA : Response
    {
      protected override void Invoke()
      {
        // Traitements sur la BDD et renvoi de la réponse
        Success = true;
      }
    }
     
    // Réponse de la fonction B
    public class ResponseFonctionB : Response
    {
      protected override void Invoke()
      {
        // Traitements sur la BDD et renvoi de la réponse
        Success = false;
        Message = "L'appel a échoué";
      }
    }
    Et mon WebService :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class Service : System.Web.Services.WebService
    {
      [WebMethod]
      public ResponseFonctionA FonctionA()
      {
        return new ResponseFonctionA();
      }
     
      [WebMethod]
      public ResponseFonctionB FonctionB()
      {
        return new ResponseFonctionB();
      }
    }
    Et voilà, comme ça j'ai un seul bloc try{} catch{} pour toutes mes WebMethods

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion globale des erreurs UncaughtErrorEvent
    Par Garra dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 26/05/2013, 16h35
  2. Réponses: 10
    Dernier message: 26/11/2009, 10h05
  3. Gestion globale des erreurs
    Par claire_S dans le forum Struts 2
    Réponses: 5
    Dernier message: 20/04/2009, 11h24
  4. gestion personnaliser des erreurs PHP
    Par pascalbout1 dans le forum Langage
    Réponses: 2
    Dernier message: 10/12/2007, 16h39
  5. Réponses: 3
    Dernier message: 21/10/2006, 22h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo