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

Divalto Discussion :

[X.3 203a] Mettre en place un WebService Diva


Sujet :

Divalto

  1. #1
    Expert éminent
    [X.3 203a] Mettre en place un WebService Diva
    Bonjour,

    Je débute avec Divalto, et j'ai promis à mon client une interface WebService pour pouvoir déverser des informations depuis un site web distant dans Divalto.

    J'ai donc commencé à écrire un programme Diva en me basant sur les exemples fournis.

    Seulement j'ai un souci avec la déclaration du service lui-même : lorsque le j'appelle Divalto me répond :
    Impossible de gérer la demande sans paramètre d'action valide. Indiquez une action soap valide.
    J'ai déclaré mon service depuis Harmony via "Harmony > Paramétrage > Action des services".

    Le projet Diva compile bien.

    Et je l'appelle depuis un programme C# de cette manière :
    Code CSHARP :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
     
    string soap = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                    "<soap12:Envelope xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />si=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />sd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">" +
                    "<soap12:Body>" +
                    "<WebServiceDiva xmlns=\"http://divaltotrt/WebServiceDiva/WebServiceDiva.asmx\">" +
                    "<action>{0}</action>" +
                    "<param>{1}</param>" +
                    "</WebServiceDiva>" +
                    "</soap12:Body>" +
                    "</soap12:Envelope>";
     
                HttpClient hc = new HttpClient();
                HttpContent content = new StringContent(string.Format(soap, "WEB_ICNT", JsonQuery));
                HttpResponseMessage m = await hc.PostAsync("http://divaltotrt/WebServiceDiva/", content);
                Console.WriteLine(m.Content.Headers.ContentLength);
                string s = await m.Content.ReadAsStringAsync();
                Console.WriteLine(s);


    "WEB_ICNT" est le nom du WebService que j'ai déclaré dans Harmony.
    Et JsonQuery est une requête JSON contenant les données à importer.

    En tout début de programme, mon WebService doit écrire des informations dans le journal de bord, mais je ne retrouve rien. Visiblement il ne démarre même pas !

    Avez-vous une idée de ce que j'ai fait de mal ? (à part promettre à mon client un truc que j'ai jamais fait )
    On ne jouit bien que de ce qu’on partage.

  2. #2
    Expert éminent
    Bonjour,

    Finalement, le problème n'avait rien à voir avec Divalto, mais simplement SOAP.
    J'ai rajouté un SOAPAction dans le header HTTP et c'est passé !
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Expert éminent
    Bonjour,

    Malgré l'absence de mouvement sur ce forum, je vais quand même relater ici mes progrès.

    Déjà, dans un premier temps, avec l'ancien mode de licence, l'appel à un WebService Diva consomme une licence.
    Donc je suis resté bloqué un certain temps avec ce problème, dans la mesure où dès que j'ouvrais Divalto pour consulter les modifications apportées par mon WebService, je me retrouvais avec mon programme qui ne fonctionnait plus par manque de licence !

    Passé ce problème, je me suis heurté à un second problème bien plus gênant : les WebServices Diva ne sont pas fait pour fonctionner avec de multiples envirronements.
    En effet, le WebService est commun à tous les environnements, et s'exécute dans /divalto/sys

    Par conséquent, le seul moyen de s'en sortir c'est :
    - d'indiquer un utilisateur dans la déclaration du web service Diva
    - de créer cet utilisateur dans xlog.dhfd présent dans /divalto/sys
    - de créer un fichier implicitesXXX.txt et implicitesXXX.xml pour cet utilisateur dans /divalto/sys donnant accès aux chemins et bases de l'environnement désiré

    En conclusion, si je veux avoir un même WebService qui fonctionne sur DEV/TEST/PROD (si les trois environnements sont sur le même serveur) on doit déclarer 3 services diva avec trois utilisateurs différents, ayant chacun des implicites permettant de se connecter aux différents environements

    Quand on sait ça, après ça marche tout seul
    On ne jouit bien que de ce qu’on partage.

  4. #4
    Nouveau Candidat au Club
    Pouvez vous me donner une précision ?
    Bonjour,

    Vous dites avoir ajouté SOAPAction dans l'entête http, comment cela se traduit-il dans le code ?

    Merci d'avance.

    Jules

  5. #5
    Expert éminent
    Voici ce que j'ai dans mon code :
    Code csharp :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
                    Divalto.DivaltoServiceSoapClient client = new Divalto.DivaltoServiceSoapClient(Divalto.DivaltoServiceSoapClient.EndpointConfiguration.DivaltoServiceSoap12);
                    Divalto.WebServiceDivaResponse response = await client.WebServiceDivaAsync("<action>WEB_TEST", JsonQuery);


    Pour ce qui est du JsonQuery, il contient une chaîne JSON que je parse ensuite dans le Diva.
    On ne jouit bien que de ce qu’on partage.

  6. #6
    Expert éminent
    Citation Envoyé par StringBuilder Voir le message

    Passé ce problème, je me suis heurté à un second problème bien plus gênant : les WebServices Diva ne sont pas fait pour fonctionner avec de multiples environnements.
    En effet, le WebService est commun à tous les environnements, et s'exécute dans /divalto/sys
    Déterrage de topic (enfin, pas tant que ça, c'est toujours le premier de la liste ^^)

    Finalement, dans le wiki on trouve comment contourner cette limitation.
    Un WebService ne peut pas utiliser dynamiquement un environnement (ça aurait été quand même vachement pratique de l'avoir dans le HMP de l'action par exemple... ou dans la déclaration du service harmony).

    En revanche, on peut indiquer dans un fichier divaltoEnv.txt directement à côté des fichier *.asmx le nom de l'environement avec la balise HMP <env>.

    Et si on veut utiliser les webservices avec plusieurs environnement, il suffit de dupliquer le dossier avec chacun un divaltoEnv.txt différent, et déclarer autant de webservices dans IIS.
    On ne jouit bien que de ce qu’on partage.

###raw>template_hook.ano_emploi###