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

ASP.NET Discussion :

Erreur du serveur dans l'application


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 62
    Points
    62
    Par défaut Erreur du serveur dans l'application
    Bonjour,

    Je m'occupe d'une appli web développée par une tierce personne avec Visual Studio 2003 en ASP.NET. Elle est hébergée sur un serveur de notre entreprise, on y accède via un intranet.
    Celle-ci marche très bien, mais par moment, un message d'erreur s'affiche sur la frame principale :

    Erreur du serveur dans l'application '/caisses'.
    La référence d'objet n'est pas définie à une instance d'un objet.
    ...

    (cd fichier joint)

    Il suffit de cliquer sur un autre lien, puis de revenir dessus et la page s'affiche correctement.
    C'est pour ça que je ne pense pas que ce soit une erreur de code, mais peut-être plus une erreur système ou réseau (serveur un peu trop faible ??).

    Est ce que quelqu'un a déjà eu ce genre d'erreur ? Comment faire pour ne plus l'avoir ?

    Merci pour vos réponses.

    Tony
    Images attachées Images attachées  

  2. #2
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Salut,


    Est ce que quelqu'un a déjà eu ce genre d'erreur ?
    Oui

    Comment faire pour ne plus l'avoir ?
    Trouver le bug

    Plus serieusement, la trace t'indique que tu as une erreur dans la fonction DAC.cDAC.DT_To_Hash, donc, il faudrait ajouter une petite tracounette la-dedans pour voir d'ou le pb vient...

    Typiquement, dans ce cas, tu fais une operation sur un objet nul

    Si tu veux poster le code de cette methode, on peut jeter un oeil

    Sinon, en passant, les normes de codes employees, c'est mal (les _, c'est mal, faire des methodes prefixees par get_, c'est mal aussi )

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 62
    Points
    62
    Par défaut
    Salut et merci pour la réponse.

    Je vais essayer de retrouver le code pour le poster mais comme ce n'est pas moi qui ai programmé il faut le temps que je trouve...
    Ce message d'erreur n'est pas le seul que j'ai : il y en a plusieurs différents (cf fichier joint).
    Il me semble que ça arrive quand on veut insérer ou récupérer des données dans le base... mais seulement de temps en temps. Si c'est un problème au niveau du code, ça devrait arriver à chaque fois que j'essaie d'ouvrir la page ?
    En plus il n'y a qu'un utilisateur à qui ça arrive, pour les autres ça va très bien.

    Bon je post le code dès que possible.

    Merci
    Images attachées Images attachées  

  4. #4
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Pour le deuxième message, ça sent l'utilisateur avec une locale définie différemment des autres (genre, il est en en-us, et les autres en fr-fr)

    En plus il n'y a qu'un utilisateur à qui ça arrive, pour les autres ça va très bien.
    "Works on my machine" inside

  5. #5
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    A mon avis aussi, un pb de format de date. Peut-être un utilisateur qui sait pas saisir une date
    Sinon, la méthode DAC.cDAC.DT_To_Hash doit renvoyer une datatable non assignée (== null) dans le cas de certaines requêtes. Faudrait juste gérer le cas.

    A+

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 62
    Points
    62
    Par défaut
    Salut et merci pour vos réponses.

    Je pense en effet que pour la 2ème erreur que j'ai envoyé il y a un problème au niveau des utilisateurs.

    Pour la 1ère erreur envoyée, j'ai plus de mal à comprendre. Voilà le code :

    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
     
    using System;
    using System.Collections;
    using System.Data;
    using System.Text;
    using DAC;
     
    namespace Caisses.Couche_Metier
    {
    	/// <summary>
    	/// Classe de gestion des données relatives aux établissements.
    	/// </summary>
    	public class cEtablissement
    	{
    		cDAC oDac = cDAC.GetInstance;
    		Hashtable datas = new Hashtable();
     
    		public cEtablissement()
    		{
    		}
     
    		/// <summary>
    		/// Renvoie les données d'un établissement.
    		/// </summary>
    		/// <param name="id">id de l'établissement</param>
    		/// <returns>Les données d'un établissement sous forme de Hashtable</returns>
    		public Hashtable get_ParId(string id)
    		{
    			string sRetour;
    			datas.Clear();
    			datas.Add("id",id);
     
    			return oDac.DT_To_Hash(oDac.ExecutePS_DT("spS_Etablissements", datas, out sRetour));
    		}
     
    		public bool get_GarderCaisseCourante(string id)
    		{
    			return (bool)get_ParId(id)["garder_caisse_courante"];
    		}
           }
    }
    Et la procédure stockée :
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
     
     
    /****** Objet :  Procédure stockée dbo.spS_Etablissements    Date du script : 30/08/2007 15:22:47 ******/
     
    /****** Objet :  Procédure stockée dbo.spS_Etablissements    Date du script : 23/08/2007 15:28:06 ******/
    ALTER Procedure [dbo].[spS_Etablissements]
     
    -- Retrieve specific records from the [Etablissements] table depending on the input parameters you supply.
     
    (
     @id [int] = Null -- for [Etablissements].[id] column
    ,@ReturnXML [bit] = 0 -- Indicates if we want to get back XML content instead of normal resultset (@ReturnXML = 1 to get XML back)
    )
     
    -- Returns the number of records found
     
    As
     
    /*
    	This T-SQL code was automatically generated using:
     
    		SQL Server Centric .NET Code Generator
    			v 1.0.1287.20792
     
    			Generation Date: 22/08/2007 15:37:09
    			Generator name: <Developer Name Here>
    			Template last update: 24/06/2002 01:53:57
    			Template revision: 15083637
     
    			SQL Server version: 08.00.0760
    			Server: vscaissesfor
    			Database: [MFL_GDC_VA]
     
    	WARNING: This source is provided "AS IS" without warranty of any kind.
    	The author disclaims all warranties, either express or implied, including
    	the warranties of merchantability and fitness for a particular purpose.
    	In no event shall the author or its suppliers be liable for any damages
    	whatsoever including direct, indirect, incidental, consequential, loss of
    	business profits or special damages, even if the author or its suppliers
    	have been advised of the possibility of such damages.
    */
     
     
    --	IMPORTANT:
    --	Changes to this SQL code may cause incorrect behavior
    --	and will be lost if the code is regenerated. 
     
     
    If @ReturnXML Is Null
    	Set @ReturnXML = 0
     
    If @ReturnXML = 0
    	Begin
    		Select
     
    		 [Etablissements_Records].[id]
    		,[Etablissements_Records].[id_directeur]
    		,[Etablissements_Records].[nom]
    		,[Etablissements_Records].[ecart_max]
    		,[Etablissements_Records].[date_prem_saisie]
    		,[Etablissements_Records].[garder_caisse_courante]
     
    		From [fnEtablissements](@id) As [Etablissements_Records]
    	End
     
    Else
     
    	Begin
    		Select
     
    		 [Etablissements_Records].[id]
    		,[Etablissements_Records].[id_directeur]
    		,[Etablissements_Records].[nom]
    		,[Etablissements_Records].[ecart_max]
    		,[Etablissements_Records].[date_prem_saisie]
    		,[Etablissements_Records].[garder_caisse_courante]
     
    		From [fnEtablissements](@id) As [Etablissements_Records]
     
    		For XML Auto, Elements, XMLData, BINARY BASE64
    	End
     
    Return(@@RowCount)
    Voilà.
    @+

  7. #7
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Salut,

    je pense que le problème vient plus probablement de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oDac.DT_To_Hash(oDac.ExecutePS_DT("spS_Etablissements", datas, out sRetour));
    Soit ExecutePS_DT te renvoie null

    Soit DT_To_Hash fait une operation genre dt[0] et le datatable est vide...

    Apres, en passant, j'ai du mal avec la logique de convertir un dataset en hashtable, pour au final s'en servir de facon non-typee...genre, je voulais convertir mes datasets en objet, mais j'ai eu la flemme de faire le code de mapping

  8. #8
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 62
    Points
    62
    Par défaut
    Merci pour la réponse.

    Pour ce qui concerne le code, je tiens à rappeler que ce n'est pas moi qui l'est fait , c'est d'ailleurs pour cela que je nage un peu (je déteste l'asp.net)...
    Ensuite concernant vos réponses, je vais essayer de modifier le code, mais le problème c'est que l'erreur obtenue n'apparait pas à chaque fois. Donc pour faire des tests c'est pas le mieux...
    Comment ça se fait que j'ai une erreur de temps en temps pour un poste alors que les autres postes marchent très bien ? Et s'il s'agit réellement d'une erreur de code, je devrais avoir l'erreur tout le temps ?

  9. #9
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Citation Envoyé par Enthau Voir le message
    Pour ce qui concerne le code, je tiens à rappeler que ce n'est pas moi qui l'est fait
    Je sais, je ne te critiques pas, je critique le code


    je déteste l'asp.net...
    Rhhhoo, ca, par contre, c'est paas bien

    Comment ça se fait que j'ai une erreur de temps en temps pour un poste alors que les autres postes marchent très bien ? Et s'il s'agit réellement d'une erreur de code, je devrais avoir l'erreur tout le temps ?
    De ma petite expérience de debuggeur, j'ai garde une règle, c'est que tant qu'on n'a pas la preuve que ce n'est pas le code qui est en faute, autant considérer que c'est bien le code qui est fautif...

    Un des problèmes que tu as, c'est qu'actuellement, tu n'as pas encore pu identifie l'endroit ou se produit ton exception. Si cela ne se produit que dans un cas spécifique, le mieux est encore d'essayer de partir du code source, et d'essayer de voir quelle ligne peut éventuellement produire le code.

    Le mieux étant encore d'ajouter des logs, pour voir ou se produisent les erreurs, quitte a logger tous les paramétres d'entrée et de sortie d'une fonction donnée...

    Apres, si tu as des logs en place, c'est bcp plus facile de determiner d'ou vient le pb...sinonm, il faut y'aller a l'experience

  10. #10
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Citation Envoyé par pvialatte Voir le message
    Le mieux étant encore d'ajouter des logs, pour voir ou se produisent les erreurs, quitte a logger tous les paramétres d'entrée et de sortie d'une fonction donnée...
    Les logs c'est difficile (long) à lire en général. A part le log de windows qui capte les erreurs, c'est pour moi le dernier recours en général. J'utilise une console avec la trace sinon.
    Basiquement, je dirai qu'il faut donner à ton code des valeurs attendues. Sinon, il faut traiter les exceptions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    DataTable titi = MaClasseStatic.MaMethode(monIdentifiantNumerique);
    // 1 - MaMethode renvoi null dans le cas où "monIdentifiantNumerique" vaut 0
    try
    {
           // Si toto est null alors ici ça plante forcement, le code passe dans le catch
           string machaine = toto.Rows[0][0].ToString();
    }
    catch (NullReferenceException e)
    {
           // M'en fiche
    }

  11. #11
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    catch (NullReferenceException e)
    {
           // M'en fiche
    }
    Ca, c'est 10 pompes

    Parce que du coup, tu viens potentiellement de transformer un problème technique en un probleme fonctionnel

    Les logs c'est difficile (long) à lire en général. A part le log de windows qui capte les erreurs, c'est pour moi le dernier recours en général. J'utilise une console avec la trace sinon.
    Perso, je suis passe a Baretail, ca se lit pas mal...Et puis en prod, j'active que le log d'erreur, avec des logs quotidiens, et les logs de debug si necessaire (en general, non...)

  12. #12
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    C'est certain, c'est pas une jolie façon de gérer, mais pour le fonctionnel, c'est lui qui voit.

    Perso:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public static DataTable MaMethode(int monIdentifiantNumerique)
    {
           using(DataTable maTable = new DataTable())
           {
                 (...)
                 // On renvoi toujours une datatable assignée = jamais null
                 return maTable;
           }
    }
    Et par la suite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach (DataRow row in MaClasseStatic.MaMethode(monIdentifiantNumerique))
    {
     
    }
    Non?

  13. #13
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 62
    Points
    62
    Par défaut
    Merci pour vos réponses (je vois que ça a lancé un joli débat...).

    Après avoir investigué plus en profondeur, j'ai trouvé une erreur probable, dans une des tables de la base de données...
    Après modification, certaines erreurs ont été résolus, j'attends le retour des utilisateurs pour savoir si ils ont à nouveau une erreur.

    A+

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

Discussions similaires

  1. Erreur du serveur dans l'application '/phComm'.
    Par l_achraf dans le forum ASP.NET
    Réponses: 2
    Dernier message: 03/03/2009, 19h37
  2. Erreur du serveur dans l'application '/'.
    Par abbd dans le forum ASP.NET
    Réponses: 6
    Dernier message: 30/07/2008, 22h17
  3. Réponses: 14
    Dernier message: 27/05/2008, 11h36
  4. Erreur du serveur dans l'application 'MyAppli'.
    Par kheironn dans le forum ASP.NET
    Réponses: 2
    Dernier message: 05/10/2007, 11h58
  5. Erreur du serveur dans mon application
    Par lion000 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 19/05/2007, 00h06

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