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 des erreurs WS asmx


Sujet :

Services Web

  1. #1
    Membre du Club
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 51
    Points
    51
    Par défaut Gestion des erreurs WS asmx
    Bonjour,

    Je ne sais pas si je dois poster dans Services Web ou ASP.NET...

    J'ai un web service, déjà développé avec mes petites mimines et qui globalement fonctionne. C'est mon premier web service et j'ai déjà remarqués quelques erreurs de débutante (gestion des pool de connexion à la base de donnée) et on a les corrigé. à terme il est prévu migrer vers un truc plus propre, mais toujours en asmx.

    C'est un web service appelé par du code BizTalk uniquement. Il est développé dans un visual 2005 et c'est du .Net 2.0 sous forme .asmx.

    Le problème c'est qu'il ne retourne pas de messages d'erreurs quand il y a un problème de mapping nhibernate. L'autre jour, on a étendu l'utilisation de notre interface et il y avait des données manquantes en table et j'ai mis 1000 ans à trouver la cause car pas de gestion d'erreurs

    Dans ces cas d'erreurs, via internet explorer on obtient :

    Erreur du serveur dans l'application '/WebServicesIHEPAM'.
    --------------------------------------------------------------------------------

    Le format demand n'est pas reconnu pour l'URL se terminant par '/GetInformationPatient'.
    Description : Une exception non gre s'est produite au moment de l'excution de la demande Web actuelle. Contrlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

    Dtails de l'exception: System.InvalidOperationException: Le format demand n'est pas reconnu pour l'URL se terminant par '/GetInformationPatient'.

    Erreur source:

    Une exception non gre s'est produite lors de l'excution de la demande Web actuelle. Les informations relatives l'origine et l'emplacement de l'exception peuvent tre identifies en utilisant la trace de la pile d'exception ci-dessous.

    Trace de la pile:


    [InvalidOperationException: Le format demand n'est pas reconnu pour l'URL se terminant par '/GetInformationPatient'.]
    System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response) +405881
    System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath) +212
    System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig) +193
    System.Web.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +93
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155




    --------------------------------------------------------------------------------
    Informations sur la version : Version Microsoft .NET Framework :2.0.50727.3053; Version ASP.NET :2.0.50727.3053
    Et quand elle est récupéré par BizTalk, ça donne ça :

    Une SOAP Fault a été reçue suite à une récupération de données liée au patient. Description de l'erreur : Server was unable to process request. ---> Object reference not set to an instance of an object.
    Donc j'aimerais gérer les erreurs !

    J'ai regardé un peu la doc et vu qu'il fallait entourer son code de try catch et throw une soapException.
    Je l'ai testé en prenant l'exemple tout con donnée par cette page : http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

    J'ai essayé en laissant mon code ou en envoyant systématiquement la soapException mais c'est toujours la même erreur 500.

    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
        [WebMethod]
        public DTO.IHEPAM.Transport.Patient GetInformationPatient(String idPatient, String niveauChargementPatient)
        {
            _log = log4net.LogManager.GetLogger(typeof(WSPAM));
            _log.Info("WSPAM.GetPatient.Start");
            DTO.IHEPAM.Transport.Patient pat;
            //try
            //{
            //    BLL.Patient.GetPatient Patient = new BLL.Patient.GetPatient();
            //    pat = Patient.GetDossier(idPatient);
            //}
            //catch (Exception e){
                // Build the detail element of the SOAP fault.
                System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
                System.Xml.XmlNode node = doc.CreateNode(XmlNodeType.Element,
                     SoapException.DetailElementName.Name, SoapException.DetailElementName.Namespace);
     
                // Build specific details for the SoapException.
                // Add first child of detail XML element.
                System.Xml.XmlNode details =
                  doc.CreateNode(XmlNodeType.Element, "mySpecialInfo1",
                                 "http://tempuri.org/");
                System.Xml.XmlNode detailsChild =
                  doc.CreateNode(XmlNodeType.Element, "childOfSpecialInfo",
                                 "http://tempuri.org/");
                details.AppendChild(detailsChild);
     
                // Add second child of detail XML element with an attribute.
                System.Xml.XmlNode details2 =
                  doc.CreateNode(XmlNodeType.Element, "mySpecialInfo2",
                                 "http://tempuri.org/");
                XmlAttribute attr = doc.CreateAttribute("t", "attrName",
                                    "http://tempuri.org/");
                attr.Value = "attrValue";
                details2.Attributes.Append(attr);
     
                // Append the two child elements to the detail node.
                node.AppendChild(details);
                node.AppendChild(details2);
     
                //Throw the exception    
                SoapException se = new SoapException("Fault occurred",
                  SoapException.ClientFaultCode,
                  Context.Request.Url.AbsoluteUri,
                  node);
     
                throw se;
            //}
            return pat;
        }
    Du coup j'ai essayé en rajoutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                     <webServices>
    			<protocols>
    				<add name="HttpGet"/>
    				<add name="HttpPost"/>
    				<add name="HttpSoap"/>
    			</protocols>
    		</webServices>
    dans mon web.config <system.web> , mais ça ne change rien.

    Sinon l'erreur que j'avais mis 1000 ans à trouver est dû à un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <property name="LibelleComite" formula=" ( SELECT ENTITE.LIBSCE FROM ENTITE WHERE trim(ENTITE.CODSCE) = Comite ) " type="String" />
    dans un des fichier hbm.xml du mapping nHibernate. C'est du vieux NHibernate version 2 je crois...

    Je me dit que c'est peut-être un problème de config de IIS...

    Des idées ?

    J'aimerais bien récupérer des erreurs parlantes qui me dit que c'est un problème de mapping nhibernate

    Merciii

  2. #2
    Membre du Club
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 51
    Points
    51
    Par défaut
    Humm je crois qu'en fait ça marche mais ça fait pas ce que je veux [La machine n'a jamais tort, c'est celui qui est derrière qui sait pas comment lui parler ]

    J'ai oublié de préciser que le message d'erreur System.InvalidOperationException je l'ai quand j'ai mon code qui s’exécute derrière et que je refresh la page sinon c'est une erreur HTTP 500 classique.

    Du coup quand je throw systématiquement mon erreur j'ai toujours l'erreur HTTP 500 mais je crois que c'est ce qui est censé se produire... Je pensais retrouver les éléments de l'erreur genre "mySpecialInfo1" en fait.

    D'habitude quand je développe sans que je fasse rien de particulier je retrouve les erreurs ORACLE, les "no row with the identifier" etc... D'ailleurs c'est juste du texte sans mise en page comme l'erreur invalideOperationException.

    Je vois pas bien en quoi les scénarios sont différents dans ces deux processus de remonté d'erreurs.

Discussions similaires

  1. [FB] Gestion des erreurs et application francophone
    Par Benjamin GAGNEUX dans le forum Installation
    Réponses: 10
    Dernier message: 20/05/2006, 14h54
  2. [struts][Datasource]Gestion des erreurs
    Par GreenJay dans le forum Struts 1
    Réponses: 8
    Dernier message: 15/09/2004, 16h51
  3. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 02/08/2004, 11h20
  4. [XSLT]Est ce qu'il y'a la gestion des erreur en xslt ?
    Par miloud dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/02/2004, 17h19
  5. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 22h41

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