1. #1
    Membre du Club
    Profil pro
    Inscrit en
    septembre 2002
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2002
    Messages : 60
    Points : 54
    Points
    54

    Par défaut Insert via un Web Services

    Bonjour,
    J'apprends (niveau zéro) à utiliser un Web Services. Nous avons un progiciel qui utilise des Web Services pour des ajouts/modifications de données.
    Si, en exploitation nous utiliserons BizTalk, aussi bien pour des tests unitaires que pour des opérations ponctuelles, je compte utiliser VbScript que je maîtrise bien mais également qui est très rapide à mettre en œuvre pour du "one shoot".

    J'ai écris 2 programmes : Lecture et Écriture.
    Lecture me permet de voir si le Web Services est actif. Il fonctionne parfaitement bien.
    Par contre, pour Écriture, si le pg "fonctionne" apparemment bien, en réalité, pas du tout : j'essaye d'aller écrire des données via le Web Services.
    Dans un premier temps, les données sont "fausses" et ont pour but, non seulement de vérifier que le pg "fonctionne" bien mais surtout pour recevoir tous les codes retour que j'aurai à gérer dans le futur. Or, quoi que j'envoie, le Web Services me renvoie un 200 au lieu d'un 201 et/ou un 204.
    Hypothèses :
    • Je n'ai rien compris au code que j'ai glané ici et là (il y a beaucoup de vrai, même si je comprends la logique)
    • Le Web Services fonctionne mal
    • Le Web Services fonctionne bien, mais mon interprétation est mauvaise (et donc ... ?)
    • ...


    Bref, je patauge et j'aimerai avoir vos avis.
    Grand merci d'avance.
    Cordialement.
    Gilles Cartairade
    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
    MsgBox "Lecture"
      Dim strURL, http, doc
    '  Dim http As MSXML2.ServerXMLHTTP60  'ServerXMLHTTP60  ou (old) ServerXMLHTTP
    '  Dim doc As MSXML2.DOMDocument
      ' URL du flux à lire
      'https://solfi-test.age.dompap.net/
      ' strURL = "https://solfi-test.age.dompap.net/api/ImportStandard/ImportStandardTIT"
      ' strURL = "https://solfi-test.age.dompap.net/api/ImportStandard/GAPAIE"
      strURL = "https://solfi-test.age.dompap.net/api/ImportStandard/OD"
      ' Lecture du flux
      Set http = CreateObject("MSXML2.XMLHTTP")
      http.Open "GET", strURL, False
      http.send ""
      ' En cas de réussite, le code renvoyé est 200
      If (http.status = 200) Then
          MsgBox "OK"
          Set doc = http.responseXML
          MsgBox doc.XML
     '     Debug.Print doc.XML
      Else
          MsgBox "Retour Code Erreur : " & http.status & " - " & http.statusText, vbExclamation
      End If
      ' On libère les objets
      Set doc = Nothing
      Set http = Nothing
    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
      MsgBox "Ecriture"
      Dim strURL, sEnvlength, http,doc, maj
      Set http = CreateObject("MSXML2.XMLHTTP")
      strURL = "https://solfi-test.age.dompap.net/api/ImportStandard/OD"
    '  maj = "{""estModifiable"":""true"",""etablissement"":""GPMD"",""exercice"":""2017"",""monnaie"":""EUR"",""pieces"":[{""Description"":""00006348"",""Journal"":""OD"",""Objet"":""00006348"",""lignesODCompta"":[{""Compte"":""4231000"",""MontantCredit"":0,""MontantDebit"":1,""NatureAuxiliaire"":""Fournisseur"",""referenceExterne"":"""",""tiersCode"":""099990""},{""Compte"":""5122400"",""MontantCredit"":0,""MontantDebit"":0,""referenceExterne"":""""},{""Compte"":""4231000"",""MontantCredit"":0,""MontantDebit"":3,""NatureAuxiliaire"":""Fournisseur"",""referenceExterne"":"""",""tiersCode"":""099990""},{""Compte"":""5122400"",""MontantCredit"":0,""MontantDebit"":0,""referenceExterne"":""""},{""Compte"":""4231000"",""MontantCredit"":0,""MontantDebit"":3,""NatureAuxiliaire"":""Fournisseur"",""referenceExterne"":"""",""tiersCode"":""099990""},{""Compte"":""5122400"",""MontantCredit"":0,""MontantDebit"":0,""referenceExterne"":""""}],""numeroPiece"":"""",""referenceExterne"":""00006348""}]}"
      maj = "coucou"
      sEnvlength = Len(maj)
    ' GET : Insert   POST : Update
      http.Open "POST", strURL, False
      http.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
      http.setRequestHeader "Content-Length", sEnvlength
      http.send (maj)
      If (http.status = 200) Then
          MsgBox "OK"
          Set doc = http.responseXML
          MsgBox doc.XML
      Else
          MsgBox "Retour Code Erreur : " & http.status & " - " & http.statusText, vbExclamation
      End If
      Set doc = Nothing
      Set http = Nothing

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    septembre 2002
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2002
    Messages : 60
    Points : 54
    Points
    54

    Par défaut

    Bonjour,

    Autre chose : Lors d'un test, nous (le DBA et moi) avons arrêté l'instance SQL Serveur. Or, à notre plus grande surprise, le pg Lecture a continué à répondre "200" !!!

    Je me pose donc les questions suivantes :
    • L'url utilisée pointe sur une autre instance que celle imaginée : Comment le vérifier ?
    • Il y a une couche de dialogue entre le serveur SQL Serveur qui "interprète" mal la réponse du Serveur : Comment le vérifier ?
    • Il est temps que j'aille boire un café ! (je fatigue).


    Bref, notre fournisseur du Web Service étant aux abonnés absents, je me tourne vers vous pour arriver à me dépatouiller.
    Merci d'avance.
    Cordialement.

    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
    MsgBox "Lecture"
      Dim strURL, http, doc
    '  Dim http As MSXML2.ServerXMLHTTP60  'ServerXMLHTTP60  ou (old) ServerXMLHTTP
    '  Dim doc As MSXML2.DOMDocument
      ' URL du flux à lire :  <a href="https://solfi-test.age.dompap.net/" target="_blank">https://solfi-test.age.dompap.net/</a>
    '   strURL = "https://solfi-test.age.dompap.net/2/2/api/ImportStandard/ImportStandardTIT"
       strURL = "https://solfi-test.age.dompap.net/api/ImportStandard/ImportStandardTIT"
    '  strURL = "https://solfi-test.age.dompap.net/api/ImportStandard/TIT"
    '  strURL = "https://solfi-test.age.dompap.net/api/ImportStandard/GAPAIE"
      Set http = CreateObject("MSXML2.XMLHTTP")
      http.Open "GET", strURL, False
      http.send ""
      ' En cas de réussite, le code renvoyé est 200
      If (http.status = 200) Then
          MsgBox "OK"
          Set doc = http.responseXML
          MsgBox doc.XML
     '     Debug.Print doc.XML
      Else
          MsgBox "Retour Code Erreur : " & http.status & " - " & http.statusText, vbExclamation
      End If
      ' On libère les objets
      Set doc = Nothing
      Set http = Nothing
    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
      MsgBox "Ecriture"
      Dim strURL, sEnvlength, http,doc, maj
      Set http = CreateObject("MSXML2.XMLHTTP")
      strURL = "https://solfi-test.age.dompap.net/api/ImportStandard/OD"
    '  maj = "{""estModifiable"":""true"",""etablissement"":""GPMD"",""exercice"":""2017"",""monnaie"":""EUR"",""pieces"":[{""Description"":""00006348"",""Journal"":""OD"",""Objet"":""00006348"",""lignesODCompta"":[{""Compte"":""4231000"",""MontantCredit"":0,""MontantDebit"":1,""NatureAuxiliaire"":""Fournisseur"",""referenceExterne"":"""",""tiersCode"":""099990""},{""Compte"":""5122400"",""MontantCredit"":0,""MontantDebit"":0,""referenceExterne"":""""},{""Compte"":""4231000"",""MontantCredit"":0,""MontantDebit"":3,""NatureAuxiliaire"":""Fournisseur"",""referenceExterne"":"""",""tiersCode"":""099990""},{""Compte"":""5122400"",""MontantCredit"":0,""MontantDebit"":0,""referenceExterne"":""""},{""Compte"":""4231000"",""MontantCredit"":0,""MontantDebit"":3,""NatureAuxiliaire"":""Fournisseur"",""referenceExterne"":"""",""tiersCode"":""099990""},{""Compte"":""5122400"",""MontantCredit"":0,""MontantDebit"":0,""referenceExterne"":""""}],""numeroPiece"":"""",""referenceExterne"":""00006348""}]}"
      maj = "coucou"
      sEnvlength = Len(maj)
    ' GET : Insert   POST : Update
      http.Open "POST", strURL, False
    '  http.Open "GET", strURL, False
    '  http.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
      http.setRequestHeader "Content-Type", "application/json; charset=utf-8"
      http.setRequestHeader "Content-Length", sEnvlength
      http.send (maj)
      If (http.status = 200) Then
          MsgBox "OK"
          Set doc = http.responseXML
          MsgBox doc.XML
      Else
          MsgBox "Retour Code Erreur : " & http.status & " - " & http.statusText, vbExclamation
      End If
      Set doc = Nothing
      Set http = Nothing

  3. #3
    Membre chevronné
    Inscrit en
    octobre 2011
    Messages
    1 092
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 092
    Points : 1 893
    Points
    1 893

    Par défaut

    Si le service web est du type restful et qu'il réponse avec un message d'encodage json, il faut le faire découvrir avec responseText au lieu de responseXML. Et puis, le http.status qui n'est pas 200 n'empêche pas de faire la même. On peut faire simplement chaque fois comme ça sans restriction.
    Code vbs : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      http.send ""
      s = http.responseText
      MsgBox "Retour http.status : " & http.status & " - " & http.statusText & vbcrlf & "http.responseText : " & s
      'Debug.Print "Retour http.status : " & http.status & " - " & http.statusText & vbcrlf & "http.responseText : " & s
    Quant à http.status qui ne coincide pas ce qu'on attend, ça peut être dû à mal interprétation de tous les côtés, et en tout cas, il faut d'abord établir que la fonctionnalité requise soit effectivement faite côté serveur et puis on s'occupe l'émis du http.status approprié après, je pense. Et le code en question est en gros capable de bien mener ce qu'on veut transmettre du côté client au départ. C'est le côté serveur qu'il faut s'en occuper à ce moment là.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    septembre 2002
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2002
    Messages : 60
    Points : 54
    Points
    54

    Par défaut

    Merci pour tout.

    J'ai "tanné" mon fournisseur pour qu'il résolve mon problème.

    J'avais réalisé un test unitaire sur tous les web services mis à disposition et envoyé les codes retour (status) au fournisseur.
    Ces codes retour l'ont interpelé et il s'est penché (sérieusement) sur mon cas.
    Finalement, il s'est avéré que l'URL n'était pas bonne mais l'appel arrivait - à 90% - par des "chemins dérivés" au serveur, les 10% restant fournissant un 404.
    Ce sont les 404 qui leur ont mis la puce à l'oreille : En effet, ils n'utilisent pas le code retour (status) mais donnent toute l'information dans le http.responseText.
    Le status répond toujours (doit toujours répondre) 200 (faux positif).
    Maintenant que l'URL est bonne, le status est toujours 200, mais dans le http.responseText, j'ai la bonne information.
    Le fournisseur pense que ça serait une bonne idée de s'intéresser au Status Code ... Ben voyons !
    Enfin !
    En tout cas, grand merci pour les avis, cela m'a permit de mieux comprendre les Web Services.
    Merci.
    Cordialement.

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

Discussions similaires

  1. [Axis2]Problème de transmission d'objets via un web services
    Par Martin22 dans le forum Web Services
    Réponses: 2
    Dernier message: 24/08/2009, 18h38
  2. POST - Joindre un fichier via le web service
    Par bloodyrouk dans le forum Débuter
    Réponses: 1
    Dernier message: 08/06/2009, 07h43
  3. Envoi d'un flux XML via un web service
    Par flex01 dans le forum DOM
    Réponses: 1
    Dernier message: 05/02/2009, 15h37
  4. Récupérer un bean via un web service
    Par PeterEMF dans le forum Flex
    Réponses: 3
    Dernier message: 03/06/2008, 15h13
  5. Transmettre le resultat d une requete via un web service
    Par Mr_Welby dans le forum Services Web
    Réponses: 4
    Dernier message: 11/01/2008, 17h04

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