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 :

Exception renvoyer par le Web Service


Sujet :

Services Web

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 18
    Par défaut Exception renvoyer par le Web Service
    Bonjour,

    J'ai un souci avec la gestion des exceptions et j'ai pas trouvé de tutoriel en parlant.
    J'ai mon web service qui fonctionne sans problème, j'ai générer ma référence au service (Ajouter une référence de service ...) afin de consommer mon web service.

    Tout fonctionne bien quand les données sont bonnes, mais mon web service est charger de faire certaines vérification tel que le nom d'utilisateur qui doit contenir au moins 5 caractères.
    Si ce n'est pas le cas: voici l'erreur retourné par mon web service :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
       <S:Body>
          <S:Fault xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
             <faultcode>S:Server</faultcode>
             <faultstring>Le nom d'utilisateur doit contenir au moins 5 caractères.</faultstring>
        </S:Fault>
       </S:Body>
    </S:Envelope>
    Le problème c'est que lorsqu'une exception est levé, j'obtiens une exception du type FormatException qui ne me permet pas de retrouver l'erreur spécifié par mon web service.

    Comment faut-il faire pour récupérer les exceptions du web service ?

    Merci d'avance

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Par défaut
    Salut Mric,

    Dans la méthode que tu utilise dans ton Service Web, as-tu déjà mis un try... catch dans ton code? Est-ce que tu peux exécuter ton Service Web en mode debug?

    Cédric

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 18
    Par défaut
    Oui j'ai bien mis un bloc try catch, mais la seule exception qui est levé est FormatException, j'ai essayer avec un FaultException mais ça ne marche pas.

    J'ai ceci au niveau de la déclaration de ma méthode d'authentification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
            [System.ServiceModel.FaultContractAttribute(typeof(ClientGrIDsure.GrIDsure.fault), Action="", Name="fault")]
            [System.ServiceModel.XmlSerializerFormatAttribute()]
            ClientGrIDsure.GrIDsure.authenticationResponse authentication(ClientGrIDsure.GrIDsure.authentication request);
    Je vois pas trop de ce que ca veut dire :s

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Par défaut
    Salut Mric_,

    si j'ai bient compris, ta as Service Web, par exemple: web2, qui appelle une méthode du Service Web web1 comme toto(...)?

    Tu dis que tu aa ajouter une référence dans Web2 sur Web1 afin de pouvoir utiliser la méthode toto(...) par exemple:

    As-tu essayer de faire qqch comme ça dans Service Web web1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [WebMethod]
    public string toto( string authentification)
    {
    .....
    return "ok";
    }
    Si en appelant cette methode construite de cette façon cela passe, cela voudrait que tu as ton problème viendrait du type de données que tu as défini!
    Est-ce que cela répond à ce que tu veux???

    Cédric

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 18
    Par défaut
    Citation Envoyé par Cédric B. Voir le message
    Salut Mric_,

    si j'ai bient compris, ta as Service Web, par exemple: web2, qui appelle une méthode du Service Web web1 comme toto(...)?
    c'est exactement ca

    En fait j'ai (et c'est peut être pas la meilleure solution en fait) généré automatiquement l'accès à mon webService (Ajouter une référence de service -> adresse du web service et il fait tout).

    Ca me donne ca :
    la Web methode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public authenticationResponseType authentication(authenticationType authentication1) {
                authentication inValue = new authentication();
                inValue.authentication1 = authentication1;
                authenticationResponse retVal = ((GridsureService)(this)).authentication(inValue);
                return retVal.authenticationResponse1;
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
            ClientGrIDsure.GrIDsure.authenticationResponse ClientGrIDsure.GrIDsure.GridsureService.authentication(ClientGrIDsure.GrIDsure.authentication request) {
                return base.Channel.authentication(request);
            }
    ou le base est un System.ServiceModel.ClientBase qui permet d'initialiser une classe grâce à des informations de configuration qui sont je sais pas ou :s

    classe authenticationType (qui en gros contient uder, token, pass) :
    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
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.1434")]
        [System.SerializableAttribute()]
        [System.Diagnostics.DebuggerStepThroughAttribute()]
        [System.ComponentModel.DesignerCategoryAttribute("code")]
        [System.Xml.Serialization.XmlTypeAttribute(Namespace="ws.gridsure.research.ca.fr/v01")]
        public partial class authenticationType : object, System.ComponentModel.INotifyPropertyChanged {
     
            private string userIdField;
     
            private string tokenField;
     
            private string passCodeField;
            [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
            public string userId {
                get {
                    return this.userIdField;
                }
                set {
                    this.userIdField = value;
                    this.RaisePropertyChanged("userId");
                }
            }
            [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
            public string token {
                get {
                    return this.tokenField;
                }
                set {
                    this.tokenField = value;
                    this.RaisePropertyChanged("token");
                }
            }
            [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)]
            public string passCode {
                get {
                    return this.passCodeField;
                }
                set {
                    this.passCodeField = value;
                    this.RaisePropertyChanged("passCode");
                }
            }
     
            public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
     
            protected void RaisePropertyChanged(string propertyName) {
                System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
                if ((propertyChanged != null)) {
                    propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
                }
            }
        }
    classe authenticationResponseType (qui en gros contient un sessionId) :
    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
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.1434")]
        [System.SerializableAttribute()]
        [System.Diagnostics.DebuggerStepThroughAttribute()]
        [System.ComponentModel.DesignerCategoryAttribute("code")]
        [System.Xml.Serialization.XmlTypeAttribute(Namespace="ws.gridsure.research.ca.fr/v01")]
    public partial class authenticationResponseType : object, System.ComponentModel.INotifyPropertyChanged {
     
            private string sessionIdField;
            [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
            public string sessionId {
                get {
                    return this.sessionIdField;
                }
                set {
                    this.sessionIdField = value;
                    this.RaisePropertyChanged("sessionId");
                }
            }
     
            public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
     
            protected void RaisePropertyChanged(string propertyName) {
                System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
                if ((propertyChanged != null)) {
                    propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
                }
            }
        }
    classe authentication :
    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
    [System.Diagnostics.DebuggerStepThroughAttribute()]
        [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
        [System.ServiceModel.MessageContractAttribute(IsWrapped=false)]
        public partial class authentication {
     
            [System.ServiceModel.MessageBodyMemberAttribute(Name="authentication", Namespace="ws.gridsure.research.ca.fr/v01", Order=0)]
            public ClientGrIDsure.GrIDsure.authenticationType authentication1;
     
            public authentication() {
            }
     
            public authentication(authenticationType authentication1) {
                this.authentication1 = authentication1;
            }
        }
    Je sais pas si ca va t'aider :s !!!
    Sinon tu pense que je peux refaire les appels aux web service moi même avec la possibilité d'envoyer et de récupérer plusieurs paramêtres tout en gérant les exceptions ?

    PS : dsl mais je viens de commencer en .net et c'est moins facile qu'en JAVA :p

    Merci de ton aide

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Par défaut
    Salut Mric_,

    Ah je comprends, tu as créé ta classe c# à partir d'un fichier *.wsdl avec wsdl.exe.
    Si je comprends bien, lorsque tu déclares une varaible de type "authentificationType" à quel moment affectues-tu des attributs "userIdField" et "passCodeFild"???

    Cédric

Discussions similaires

  1. Réponses: 12
    Dernier message: 14/01/2011, 10h10
  2. Réponses: 0
    Dernier message: 02/06/2010, 23h57
  3. Réponses: 1
    Dernier message: 08/07/2009, 14h00
  4. Réponses: 8
    Dernier message: 08/07/2008, 14h11
  5. Réponses: 5
    Dernier message: 22/05/2008, 14h55

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